ã¯ããã«
以åã®èšäºã§ã¯ãã¢ãããŒãã®ç¯å²ãç¹å®ãã ãã¡ã€ã³é§åèšèšã®åºæ¬çãªæ¹æ³è«ã®ååãæ€èšããŸããã
ãã®èšäºã§ã¯ãäŒæ¥ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ãæ§ç¯ããããã®äž»ãªçŸä»£çãªã¢ãããŒããSuppleãScreamingãCleanã®æŠèŠã説æããå®å šãªã¿ãŒã³ããŒãœãªã¥ãŒã·ã§ã³ã®åœ¢ã§æ確ãªè§£éã瀺ããŸãã
å°æ¥ãåèšèšãã¿ãŒã³ã詳现ã«æ€èšããŸããã¹ã³ãŒãã瀺ããã³ãŒãäŸã瀺ããæšå¥šããããã©ã¯ãã£ã¹ã匷調ããŸãã ãã®çµæãæ¢è£œã®ãã€ã¯ããµãŒãã¹ãäœæããŸãã
æè»ãªã¢ãŒããã¯ãã£
ååã®èšäºã§ã¯ãDDDã«ã¯ã¢ãã«ãä»ããå®è£ ã®ãã©ã¯ãã£ã¹ãå«ãŸããŠãããšããäºå®ã«çŠç¹ãåœãŠãŸããã ãµããžã§ã¯ãé åã¯ãã³ãŒããéããŠèª¬æããå¿ èŠããããŸãã ãããè¡ãæ¹æ³ãç解ããŠã¿ãŸãããã
圌ã®æ¬ã§ããšãªãã¯ã»ãšãŽã¡ã³ã¹ã¯äžé£ã®æšå¥šèšèšãã¿ãŒã³ãæäŸãããã®ã¢ãããŒããæè»ã§ãããšæå®ããŠããŸãã
ã¢ãŒããã¯ãã£ã®æè»æ§ã®åã®ããšã«ãå€ãã®äžèŠãªæ§é ãããã°ã©ã ã«ç©ã¿äžããããŸããã éå°ãªã¬ãã«ã®æœè±¡åãšéæ¥çãªãªã³ã¯ã¯ããã®åé¡ã«åœ¹ç«ã€ãããå¹²æžããå¯èœæ§ãé«ããªããŸãã ããã°ã©ããŒã«ãããæŽç·Žãããããã«æ¬åœã«ä¿ããŠããã¢ãŒããã¯ãã£ãèŠãŠãã ããããããŠãããªãã¯éåžžéåžžã«åçŽãªäœããèŠãã§ãããã ããããã·ã³ãã«ãšããã®ã¯ç°¡åã«å®è¡ã§ãããšããæå³ã§ã¯ãããŸããã è€éãªã·ã¹ãã ã«çµã¿ç«ãŠãããšãã§ããåæã«ç解ããããèŠçŽ ãäœæããã«ã¯ãããªãå³æ Œãªã¹ã¿ã€ã«ã®ã¢ãŒããã¯ãã£ã«åŸã£ãŠãã¢ãã«ã«åºã¥ããèšèšã«ãç®èº«ããçµã¿åãããå¿ èŠããããŸãã äœããäœæããã ãã§ãªããå®æãããã®ã䜿çšããããã«ããç¹å®ã®èšèšã¹ãã«ãå¿ èŠã§ãã
Eric Evansããã¡ã€ã³é§åèšèšïŒãœãããŠã§ã¢ã®äžå¿ã«ããè€éããžã®åãçµã¿
æ瀺ãããäžé£ã®èšèšãã¿ãŒã³ã¯ãå³å¯ãªã¢ãŒããã¯ãã£ãŸãã¯æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããæèã®ç³§ã§ãã
掟æãªã¢ãŒããã¯ãã£
åæ§ã®èãããè€éãªã·ã¹ãã ã®å€ãã®éçºè ãèšèšè ã®å¿ã«æµ®ãã³ãŸããã
2011幎ã«ãRobert Martin- Screaming Architectureãèšäºãå ¬éããŸããããã®èšäºã§ã¯ãã³ãŒãã¯ãµããžã§ã¯ãé åãèšè¿°ããã ãã§ãªãã奜ãŸããã¯ãããã€ã§ãããšå«ã¶ã¹ãã§ãããšè¿°ã¹ãŠããŸãã
ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã¯äœãå«ãã§ããŸããïŒ æäžäœã®ãã£ã¬ã¯ããªæ§é ãšæäžäœã®ããã±ãŒãžã®ãœãŒã¹ãã¡ã€ã«ãèŠããšã 圌ãã¯æ²é³ŽãäžãããïŒãã«ã¹ã±ã¢ã·ã¹ãã ããŸãã¯äŒèšã·ã¹ãã ããŸãã¯åšåº«ç®¡çã·ã¹ãã ïŒ ãããšããRailsãSpring / HibernateããŸãã¯ASPã®ããã«å«ã³ãŸããïŒ
ãããŒãC.ããŒãã£ã³ã2011幎9æ30æ¥
Robertã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãã¬ãŒã ã¯ãŒã¯ã®ã«ãŒã«ã«é©å¿ããã®ã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã£ãåæ ããå¿ èŠããããšèšããŸãã ãã¬ãŒã ã¯ãŒã¯ã®æ§é ã«ãã£ãŠã¢ãŒããã¯ãã£ãå¶éãããããšã¯ãããŸããã 次ã«ãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ãŸãã¯HTTPãããã³ã«ã«æ¥ç¶ããªãã§ãã ããããããã¯åãªãã¹ãã¬ãŒãžããã³é ä¿¡ã¡ã«ããºã ã§ãã å¢çããã¯ã¹ã¯ããŒã«ã§ãã ãã¬ãŒã ã¯ãŒã¯ã®æ¯æè ã«ãªãã¹ãã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã¯ããã®åäœã®ããžãã¯ã®ãã¹ãã§ãããhttpãããã³ã«ã®ãã¹ãã§ã¯ãããŸããã
ããããªå»ºç¯
1幎åŸããããŒãã»ããŒãã£ã³ã«ãã次ã®èšäº-The Clean Architecture ã ãã®äžã§ãèè ã¯ã³ãŒããå«ã¶æ¹æ³ãæããŠããŸãã ããã€ãã®ã¢ãŒããã¯ãã£ãç 究ããåŸã圌ã¯åºæ¬ååãç¹å®ããŸãã
- ãã¬ãŒã ç¬ç«ã ã¢ãŒããã¯ãã£ã¯æ¢åã®ã©ã€ãã©ãªã«äŸåããŸããã ããã«ãããæãçžãå¶éã§ã¯ãªãããã¬ãŒã ã¯ãŒã¯ãããŒã«ãšããŠäœ¿çšã§ããŸãã
- ãã¹ã容ææ§ã ããžãã¹ã«ãŒã«ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããŒã¿ããŒã¹ãWebãµãŒããŒããŸãã¯ãã®ä»ã®æè¡çæ段ãªãã§ãã¹ãã§ããŸãã
- UIã®ç¬ç«ã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã·ã¹ãã ã®æ®ãã®éšåãå€æŽããã«ç°¡åã«å€æŽã§ããŸãã ããšãã°ãããžãã¹ããžãã¯ãå€æŽããã«ãWebã€ã³ã¿ãŒãã§ã€ã¹ãã³ã³ãœãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã«çœ®ãæããããšãã§ããŸãã
- ããŒã¿ããŒã¹ã®ç¬ç«ã OracleãŸãã¯SQL ServerãMongoãBigTableãCouchDBãªã©ãšäº€æã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ããžãã¯ãããŒã¿ããŒã¹ã«ãã€ã³ãããªãã§ãã ããã
- ç°å¢ã®åœ±é¿ããã®ç¬ç«ã å®éãããžãã¹ã«ãŒã«ã¯å€ã®äžçã«ã€ããŠäœãç¥ããªãã ãã§ãã
Habrã§ã Delusions of Clean Architectureã®éåžžã«è¯ãèšäºããã§ã«å ¬éãããŠããŸãã ãã®èè ã§ããJeevuzã¯ããã®ã¢ãããŒããç解ããè€éããéåžžã«ããåã¿ãŸããã ãããšãªãªãžãã«ã®è³æã®äž¡æ¹ãããç解ããããšã匷ããå§ãããŸãã
å¯å€ã¢ãŒããã¯ãã£
äžèšã®ã¢ãããŒãã®èª¬æã¯ããã»ã©åçŽã§ã¯ãããŸããã å€æ°ã®è€éãªäŒæ¥ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã®éçºã®äžç°ãšããŠãååãšç§ã¯ã以äžã§èª¬æããã¢ãããŒãã®ããªãæ確ãªè§£éãéçºããŸããã
ã³ã³ãã¥ãŒã¿ãŒãšããã°ã©ãã³ã°èšèªãç»å Žããåã¯ãçŽã®ã¯ãŒã¯ãããŒã䜿çšããŠãè€éãªããžãã¹ããžãã¯ãæã€ã·ã¹ãã ãæ§ç¯ããã³ç®¡çããŠããŸããã ããã»ã¹ã®çµæã¯ãæçµçã«ç¹å®ã®ããžãã¹ãªããžã§ã¯ãã説æããããã¥ã¡ã³ãã«ãªããŸããã ãã®çµæãäºååŠçã¯3ã€ã®åçŽãªã¢ã¯ã·ã§ã³ã«ãªããŸãã ã
- ããã¥ã¡ã³ãäœæ
- ææžåŠç
- ææžã®ã¢ãŒã«ã€ããæäœãã
- ææžæåº
ããã¥ã¡ã³ã-ç¹å®ã®å®éã®ããžãã¹ãªããžã§ã¯ãã®çµæžæŽ»åã«é¢ããæ å ±ãèšé²ããŸãã
ããã¥ã¡ã³ãèªäœã¯å®éã®ããžãã¹ãªããžã§ã¯ãã§ã¯ãªãããã®Modelã®ã¿ã§ããããšã«æ³šæããŠãã ããã çŸåšãçŽã®ææžã¯é»åææžã«çœ®ãæããããŠããŸãã ææžã¯ãè¡šã®èšé²ãåçããã¡ã€ã«ãéä¿¡ãããæçŽããŸãã¯ãã®ä»ã®æ
å ±ã§ãã
åèªããã¥ã¡ã³ãã¯ä»åŸæ··ä¹±ããã®ã§ãä»åŸã¯äœ¿çšããŸãããDDDçšèªã®ãšã³ãã£ãã£ã®æŠå¿µã䜿çšããŸãã ããããã·ã¹ãã å
šäœã4ã€ã®ã·ã³ãã«ãªã¢ã¯ã·ã§ã³ãå®è¡ããé»åææžç®¡çã·ã¹ãã ã§ãããšæ³åã§ããŸãã
- åé
- åŠçäž
- ä¿ç®¡
- 代衚è
ã¢ã¯ã·ã§ã³-ããžãã¹ã¢ãã«ã®æŽ»åã®æ§é åäœã æèçãªç®æšã®æ¯èŒçå®äºããå¥åã®è¡çºãããžãã¹ãªããžã§ã¯ãã®åã ã®ã¢ã¯ãã£ããã£ã®ææ§ãšæå³æ§ããšã³ããŠãŒã¶ãŒã«ãã£ãŠåºå¥ãããŸãã
ã¢ã¯ã·ã§ã³ã®è¯ãäŸã¯ãæŒåã§ãã åå Žã¯å®ç掻ã®ã€ãã³ããã¢ãã«åããŠããŸãã ãã®è¡çºã¯åã®éèŠãªéšåã§ãã ãã ããã¹ããŒãªãŒãå®æãããã«ã¯ãããã€ãã®ã¢ã¯ããå³å¯ã«æå®ãããé åºã§æŒå¥ããå¿ èŠããããŸãã ã¢ãŒããã¯ãã£å ã®ãã®ãããªé åºãModeãšåŒã³ãŸã ã
ã¢ãŒãïŒConductionïŒ-ç¹å®ã®é åºã§ã®ã¢ã¯ã·ã§ã³ã®ã»ãããå®å šãªæå³ãæã¡ããšã³ããŠãŒã¶ãŒã«ãšã£ãŠæçã§ãã
ãã®ãããªåäœã¢ãŒãã§ã¯ãéžæçãªå°äœãŸãã¯ã»ã¬ã¯ã¿ãçºæãããŸããã ããæ£ç¢ºã«ã¯ãç¹èš±US2870278AãååŸããããè€æ°ã®åäœã·ãŒã±ã³ã¹ã®éžæããã1ã€ãå®è¡ããã¿ã€ãã³ã°æ©æ§ãã ãã®è£ 眮ã¯æŽæ¿¯æ©ã®ããããããšããŠç¥ãããŠããŸãã ã¢ãŒããã¯ãã£ã®ãããã«ã€ããŠã¯ãèšäºã®åé ã§èª¬æããŸãã
ãã®ã¢ãŒããã¯ãã£ã§ã¯ã4ã€ã®ã¢ãŒãã®ãããããéžæããŠãäžèŠãªã¢ã¯ã·ã§ã³ãå®è¡ããªãã¢ãŒããéžæã§ãããšããäºå®ã«ãã¢ãããŒãã®ã°ãã€ããçŸããŠããŸãã
æŽæ¿¯æ©ãèµ·åãããšããã¢ãŒããéžæã§ããŸãïŒæŽæ¿¯ããããããŸãã¯å転ã æŽæ¿¯ããããšãéžæããå ŽåãæŽæ¿¯æ©ã¯æŽæ¿¯ç©ããããããã®åŸçµãããšãã§ããŸãã ãããããããããšã§ã確å®ã«å転ããŸãã ã¹ãã³-æŽæµããã»ã¹ã®æçµã¢ã¯ã·ã§ã³ã§ãããæããã·ã³ãã«ãã§ãã ãã®ã¢ãŒããã¯ãã£ã§ã¯ãæãåçŽãªActionã¯Representationã§ãããããããå§ããŸãã
è¡šçŸ
ããŒã¿ããŒã¹ãå€éšãœãŒã¹ã«é Œããã«çŽç²ãªãã¥ãŒã«ã€ããŠè©±ãå Žåãããã€ãã®éçãªæ å ±ãåºåããŸãïŒHTMLããŒãžããã¡ã€ã«ãjsonã®åœ¢åŒã®ãã£ã¬ã¯ããªã Codeã¬ã¹ãã³ã¹ -200ãäžããããšãã§ããŸãïŒ
æãåçŽãªããã«ã¹ãã§ãã«ãŒããæžããŸããã
module Health class Endpoints < Sinatra::Base get '/check' do; end end end
æãåºæ¬çãªåœ¢åŒã§ã¯ãã¹ããŒã ã¯æ¬¡ã®ããã«ãªããŸãã
Sinatraãã¬ãŒã ã¯ãŒã¯ã§ã¯ã Endpointsã¯ã©ã¹ãã«ãŒã¿ãŒãšã³ã³ãããŒã©ãŒã®äž¡æ¹ã1ã€ã®ã¯ã©ã¹ã«çµåããŠããããšã«æ³šæããŠãã ããã ããã¯å¯äžã®è²¬ä»»ã®ååã«éåããŸããïŒ å®éããšã³ããã€ã³ãã¯ã¯ã©ã¹ã§ã¯ãªããã¯ã©ã¹ãéããŠè¡šçŸãããå±€ã§ããããã®è²¬ä»»ç¯å²ã¯ããé«ãã¬ãã«ã«ãããŸãã
OKã ã«ãŒã¿ãŒãšã³ã³ãããŒã©ãŒã¯ã©ãã§ããïŒ ã¯ã©ã¹ã®ã»ããã§ã¯ãªããé¢æ°ã®ååãšå®è£ ã«ãã£ãŠè¡šãããŸãã éåžžãéçãã¡ã€ã«ã¯ãã¡ã€ã«ã§ãã 1ã€ã®ã¯ã©ã¹ã1ã€ã®è²¬ä»»ãæ åœããŸãããã¯ã©ã¹ãéããŠå責任ãè¡šãããšããªãã§ãã ããã ç¬æ䞻矩ã§ã¯ãªãå®çšæ§ã䜿çšããŠãã ããã
ã¹ãã¬ãŒãžã·ã¹ãã ãæäœãã
ããžãã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å¯çšæ§ãèŠæ±ããŠããŸãã é©åãªã¿ã€ãã³ã°ã§äœ¿çšã§ããªãã®ã«ããªãããªãã®ãµãŒãã¹ãå¿ èŠãªã®ã§ããããïŒ ããŒã¿ã®æŽåæ§ã確ä¿ããããã«ãååŠçåŸã®ããžãã¹ãªããžã§ã¯ãã®ç¶æ ã®å€åãèšé²ããŸãã
ã¹ãã¬ãŒãžãããªããžã§ã¯ããååŸããã«ã¯ãããžãã¹ããžãã¯ã«ã¢ã¯ã»ã¹ããå¿ èŠã¯ãããŸããã ããã«ãã§ãŒã³ã®æŽ»åãèªååããã¬ã»ãã·ã§ã³ã«ã²ã¹ããã¬ãžã³ãæã£ãŠãããšæ³åããŠãã ããã 蚪åè ã«é¢ããæ å ±ã衚瀺ããããšã«ããŸããã
module Reception class Endpoints < Sinatra::Base # Show item get '/residents/:id', provides: :json do resident = Repository::Residents.find params[:id] status 200 serialize(resident) end end end
ã°ã©ãã£ãã¯ãã€ã¢ã°ã©ã ã®åœ¢åŒã§ã¹ãã¬ãŒãžã·ã¹ãã ãæäœããŸãã
ã芧ã®ãšãããä¿åãæ åœããã¬ã€ã€ãŒãšããŒã¿ãæäŸãã責任ãè² ãã¬ã€ã€ãŒãšã®éã®éä¿¡ã¯ãå¿çã¢ãã«ãéããŠå®è£ ãããŸãã ãã®ã¢ãã«ã¯ããããã®ã¬ã€ã€ãŒã®ãããã«ãå±ããŠããŸããã å®éãããã¯ããžãã¹ãªããžã§ã¯ãã§ãããããžãã¹ããžãã¯ãæ åœããã¬ã€ã€ãŒäžã«ãããŸãã
åŠçäž
æ°ããããŒã¿ãå°å ¥ããã«ãªããžã§ã¯ãã¢ãã«ããã®ããããã£ã«åºã¥ããŠå€åãããšããäºå®ã«è³ã£ãå Žåã Interactorã¬ã€ã€ãŒã«çŽæ¥ç®ãåããŸãã Interactorã¬ã€ã€ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ããŒã§ãããåå¥ã®ãŠãŒã¹ã±ãŒã¹ã®åœ¢ã§ããžãã¹ããžãã¯å šäœãèšè¿°ãã ãšã³ãã£ãã£ãå€åããŸãã
ãã®ãŠãŒã¹ã±ãŒã¹ãæ€èšããŠãã ããã 蚪åè ã¯ãã§ã«ããã«ã«ç»é²ãããŠããŸãããå°çãŸãã¯åºçºãç¥ããŸãã
module Reception class Endpoints < Sinatra::Base # Register resident arrival post '/residents/:uid/arrival', provides: :json do result = Interactors::Arrival.call(resident_id: params[:id]) check!(result) do status 201 serialize result.data end end # Register resident departure post '/residents/:uid/departure', provides: :json do result = Interactors::Departure.call(resident_id: params[:id]) check!(result) do status 201 serialize result.data end end end end
å°ããããŸãããã status
ãã©ã¡ãŒã¿ãŒã䜿çšããŠãå®è£
ãåäžã®ã¡ãœããã«ããªãã®ã¯ãªãã§ããïŒ Arrival
ãšDeparture
ã€ã³ã¿ã©ã¯ã¿ãŒã¯æ ¹æ¬çã«ç°ãªããŸãã ã²ã¹ããæ¥ãå Žåã¯ãã¯ãªãŒãã³ã°ãçµäºãããã©ãããæ°ããã¡ãã»ãŒãžãå±ãããã©ãããªã©ã確èªããå¿
èŠããããŸãã å察ã«ã圌ã®åºçºã«äŒŽããå¿
èŠã«å¿ããŠã¯ãªãŒãã³ã°ãéå§ããå¿
èŠããããŸãã é çªã«ãç§ãã¡ã¯ã¡ãã»ãŒãžã«ã€ããŠãèŠããŠããŸããããªããªãã圌ãããã«ã«ãããªããããã«åœŒã«é»è©±ããããã§ãã Interactorã¬ã€ã€ãŒã§èŠå®ããã®ã¯ããã®ãã¹ãŠã®ããžãã¹ããžãã¯ã§ãã
ããããå€éšããããŒã¿ãããå Žåã¯ã©ãããã°ããã§ããããïŒ ããã§ã ããŒã¿åéã®ã¢ã¯ã·ã§ã³ãæ¥ç¶ãããŠããŸãã
ããŒã¿åé
ããã«ã§ã®ã²ã¹ãã®æåã®ç»é²äžã«ã圌ã¯ç»é²ãã©ãŒã ã«èšå ¥ããŸãã ãã®ãã©ãŒã ã¯ç¢ºèªäžã§ãã ããŒã¿ãæ£ããå Žåãç»é²ããžãã¹ããã»ã¹ãå®è¡ãããŸãã ããã»ã¹ã¯ããŒã¿ãè¿ããŸã-äœæããããããã³ããããžãã¹ã¢ãã«ã ãã®ã¢ãã«ãã²ã¹ãã«èªã¿åãå¯èœãªåœ¢åŒã§æ瀺ããŸãã
module Reception class Endpoints < Sinatra::Base # Register new resident post '/residents', provides: [:json] do form = Forms::Registration.new(params) complete! form do check! form.result do status 201 serialize form.result.data end end end end end
æŠç¥çã«ã¯ã次ã®ããã«ãªããŸãã
ã²ãŒã ã®ã«ãŒã«ïŒã«ãŒã«ïŒ
- ããã»ã¹ã®èŠ³ç¹ãããå€åã·ã¹ãã ã¯ã¢ã¯ã·ã§ã³ã«åå²ãããŸãã
- ã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ã¯ã¢ãŒãã«ãã£ãŠæ±ºå®ãããŸã ã
- ã¢ãŒãã¯ã€ã³ã¯ãªã¡ã³ã¿ã«ã§ãã
- ããè€éãªã¢ãŒãã¯ãå³å¯ã«1ã€ã®ã¢ã¯ã·ã§ã³ã«å¯ŸããŠããåçŽãªã¢ãŒããè£å®ããŸãã
- åã¢ã¯ã·ã§ã³ã¯ã1ã€ã®Layerã®ãã¬ãŒã ã¯ãŒã¯å ã§è¡ãããŸãã
- åã¬ã€ã€ãŒã¯Classã§è¡šãããŸãã
- ã¬ã€ã€ãŒå ã«ã¯ã Layer ClassesãšResponsibility ClassesããããŸãã
- éä¿¡ã¯ã ã¬ã€ã€ãŒãšIntlayerã¯ã©ã¹ã®éã§ã®ã¿è¡ãããŸãã
- è¡šçŸã¢ãã«ã¯äŸå€ã§ãã
- ãšã©ãŒåŠçã¯ã ã¯ã©ã¹å±€ã¬ãã«ã§çºçããå¿ èŠããããŸã ã
äžè¬çãªã¹ããŒã
ãã®ã¢ãããŒãã«ã¯é«ããšã³ããªãŒãããå€ããããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã解決ããã¿ã¹ã¯ãæ確ã«ç解ããããã«ãèšèšè
ããã®å€å€§ãªçµéšãå¿
èŠãšããŸãã è€éãã¯ãå¿
èŠãªããŒã«ã®ããŸããŸãªéžæè¢ãè¡šããŸãã ããããæ§é ãè€éã§ããã«ãããããããã³ãŒãã¬ãã«ã§ã®å®è£
ã¯éåžžã«ã·ã³ãã«ã§è¡šçŸåã«å¯ãã§ããŸãã ããã¯å€ãã®æ
£ç¿ãšå§ä»»ç¶ãå«ãã§ããŸããã å°æ¥çã«ã¯ãåãã¶ã€ã³ãã³ãã¬ãŒããåå¥ã«åæãããã®äœææ¹æ³ã説æãããã¹ãããã¹ã³ãŒããæå®ããŸãã ãããŠããããã®å€æ§æ§ãæ··åããªãããã«ãå®å
šãªããããæäŸãããŠããŸãã
- åé¡æåèšèšããšãªãã¯J.ãšãŽã¡ã³ã¹
- Kate MatsudeiraïŒã¹ã±ãŒã©ãã«ãªWebã¢ãŒããã¯ãã£ãšåæ£ã·ã¹ãã
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- https://blog.cleancoder.com/uncle-bob/2011/09/30/Screaming-Architecture.html
- https://habr.com/company/mobileup/blog/335382/