ååSOLIDååãšãããã®ãæŽçããŠã¿ãŸãããããå°ããã¶ã€ã³ã«èœãšãã«ã¯åæ§æãèããå¿ èŠããããŸãã
ãã¡ã€ã³é§åèšèšïŒDDDïŒãšããèãæ¹ããããšç¥ãããµã©ãªãšè¡šé¢äžãèªãã§ãããµãŽãã«ã¢ãŒããã¯ãã£ããšã£ã€ãããããã ã£ãã®ã§ããããå ã«çŸåšã®ã³ãŒããåæ§æããŠã¿ãããšæããŸãã
ã§ããããããªã倿Žãããšèš³ãããããªããªããããªã®ã§ãµã³ãã«ã³ãŒããäœã£ãŠã¿ãããšæããŸãã
å³ã«èµ·ãããŠæŽçããŠã¿ã
èªåè»ãé転ããå ŽåãèããŠèŠãŸãã
åèªåè»è£œé äŒç€Ÿã¯åã ã§éçºããŠèªåè»ã販売ããŠããŸããããã®æäœã¯ãã³ãã«æäœãã¢ã¯ã»ã«ãšãã¬ãŒãã®ãããªã³ã°ãšå ±éããŠããŸãã
ãã®å ±éãªæäœãæœè±¡åãããéšåã§é転æããèŠããšæ£ã«èªåè»ã®ã€ã³ã¿ãŒãã§ã€ã¹ãšãªããŸãã
æäœæ¹æ³ã ãç¥ã£ãŠããã°èªåè»ã®çްããªå®è£ ãç¥ããªããŠãé転ãå¯èœãšãªããŸãã

ããã°ã©ã å¯ãã«ããå°ããã¬ãŒã¯ããŠã³ããŠã¿ããšå çšã®å³ã®ããããã¯Driver, Interface, Carãšããããã«å®çŸ©ã§ããŠãŸãããã°åºåçšã«StateãšUiã远å ããŸããã

Driverå ã®ããã³ãã«ãå·Šãžããªã©ã¯é¢æ°ãã¡ãœããã«ããããŸããããããåŒã³åºãããšã§InterfaceãéããŠCarã®Steeringãªã©ã®æ©èœãåŒã³åºããŸãã
Rustã®å Žåã¯ãInterfaceã¯traitãšããŠå®çŸ©ãããŠå®è£ éšåãCarã«ãªãã§ãããã
Driverã¯Interfaceã®ã¿ãéããŠCarã«ã¢ã¯ã»ã¹ããŸããCarã®å®è£ ã«å€æŽããã£ãŠãInterfaceã¯å€ãããªãã®ã§Driverã«åœ±é¿ã¯ãªãã¯ãã§ãã
ããã§äŸåæ§é転ãã§ããŠãããšæããŸãã
ãããµãŽãã«ã¢ãŒããã¯ãã£ã軜ãèªãã éããªã®ã§æ£ããçè§£ã§ã¯ãªããšæããŸããããŸãã§ãµãŒãéã®ããŒã¿ã®ããåãã®ãããªæãã«æããã®ã§ã³ã¬ããããã¯ãŒã¯å³ã®ããã«ããŠã¿ãŸããã

AppãDriverãCarãªã©ããã¹ãŠã€ã³ã¹ã¿ã³ã¹ãšããŠæã£ãŠãããšããŠãäžæ®µã®Driverããå ¥åãå§ãŸããInterfaceãéããŠCarã«æ å ±ãäŒéã
AppãCarã®åŠççµæãStateã«æºã蟌ãã§Uiã§ãã°åºåããšãããããªããã¡ã§ãã
æåã¯äžæ®µãå ¥åç³»ãäžæãåŠçç³»ãäžæ®µãåºåç³»ãªã©ãšåããããšæã£ãã®ã§ããã©ã®ã«ããŽãªã«ãå ¥ããªããããªãã®ãããã®ã§äžã€ã®ãããã¯ãŒã¯ãšããŠæããŠããã ããã°ã
ãã ãããŒã¿ãããŒãåããã¥ããã®ã§ããäžã€å³ãäœã£ãŠã¿ãŸããã

ã·ãŒã±ã³ã¹å³ã«ãããšãnew()ã§ã€ã³ã¹ã¿ã³ã¹ãäœãã¿ã€ãã³ã°ãšãã®ã©ã€ãã¿ã€ã ããããããã衚çŸã§ããã®ã§Ruståããªæ°ãããŸãã
ç¢å°ã®äžã«æžãããŠããã®ãäŒéçšãªããžã§ã¯ãã«ãªãããããæœè±¡åããããšã§äŸåãããªãããã«æ³šæããç®æã§ãããã
åå²ããŠäœã£ãŠã¿ã
AppãDriverãªã©ã®åäœã§åå²ããŠããã°ãããããªã®ã§å®è£ ã«ç§»ãããšæããŸãããRustã§ã¯å岿¹æ³ãšããŠã¢ãžã¥ãŒã«ãšã¯ã¬ãŒãããããŸãã
ã©ã¡ãããéžæããªããã°ãªããŸãããããããã©ã®ãããªéããããã®ãããŸãã¡ããããªãã£ãã®ã§äž¡æ¹ã®ããæ¹ã§å®è£ ããŠã¿ãããšæããŸãã
ã¢ãžã¥ãŒã«åå²
Rustã®ã¢ãžã¥ãŒã«ã¯ãã¡ã€ã«ã·ã¹ãã ã®ããªãŒæ§é ããã®ãŸãŸåæ ããããããªã€ã¡ãŒãžã«ãªããŸãã
ã¯ã¬ãŒããããã¯ã¢ãžã¥ãŒã«ã®ã«ãŒãã¯main.rsãããã¯lib.rsã«ãªããŸãã
ãã®ãã¡ã€ã«ã®äžã§mod carã®ããã«æžããšcar.rsãã¡ã€ã«ãã¢ãžã¥ãŒã«ãšããŠèªã¿èŸŒãŸããŸãã
car.rsã®äžã§ããã«mod test ã®ããã«æžããšãããããµããã©ã«ãæ±ããšãªããcarãã©ã«ãã®äžã®test.rsãã¢ãžã¥ãŒã«ãšããŠèªã¿èŸŒãŸããŸãã
ãããã䜿ãããã«ã¯ãcrate::car::test::Testãšãã£ããããªãã¹åœ¢åŒã®ãããªããã¡ã§æå®ããŸãã
ããããç°¡ç¥åããŠäœ¿ãããã«ã¯ãuseã䜿ã£ãŠåå空éã«æã¡èŸŒãå¿ èŠããããuse crate::car::test::Testã®ããã«æžããšä»¥éã¯åã«Testãšããã ãã§èªèãããŸãã
ãã®ãã¹åœ¢åŒã¯crate::car::test::Testã®ãããªã¢ãžã¥ãŒã«ã®ã«ãŒãããã®çµ¶å¯Ÿãã¹ç衚èšãuse super::Appã®ãããªçžå¯Ÿãã¹çãªè¡šèšã®ã©ã¡ããå¯èœã§ãã
å®è£ ã®è©³çްã¯examples/solid_dddã®ãªãã®solid_mod01ãã芧ãã ããã
ã³ãŒããšããŠã¯åãã§ãããããã¡ã€ã«åå²ããããã®ãsolid_mod02ãšããŠäœã£ãŠã¿ãŸããã
倿°ã®useæãstructåäœã«ãã¡ã€ã«ãåå²ããŠããŸãããã®ããã«ããå Žåãpub useã䜿ã£ãre-exportã䟿å©ã§ãã
ã¯ã¬ãŒãåå²
ã¯ã¬ãŒãã§åå²ããå Žåã¯ããããžã§ã¯ããã©ã«ãã®äžã«åå¥ã«cargo new –lib car ã®ããã«æ°ãããããžã§ã¯ããã©ã«ããäœã£ãŠããããããäœæããŸãã
æ±ããšããŠcrates.ioã§å€éšã¯ã¬ãŒããdependenciesã«èšè¿°ããããšãšåãããã«åã ã®å éšã¯ã¬ãŒããèšè¿°ããŸãã
ãããšã¯å¥ã«ã倧å ã®Cargo.tomlã§workspaceã»ã¯ã·ã§ã³ã䜿ããšããŒãžã§ã³ãªã©ãäžå 管çã§ããããã«ãªãã®ã§äŸ¿å©ã§ãïŒåã ã®å éšCargo.tomlã¯å€§å ã®Cargo.tomlã®workspaceã»ã¯ã·ã§ã³ãåç §ããããã«èšè¿°ãå¿ èŠïŒã
å®è£ ã®è©³çްã¯examples/solid_dddã®ãªãã®solid_crate01ãã芧ãã ããã
ã¢ãžã¥ãŒã«åå²ããã¯ã¬ãŒãåå²ã«ç§»è¡ããå Žåãã¢ã¯ã»ã¹æš©ãããå³ãããªãã®ã§æ³šæãå¿ èŠã§ããä»åã¯ç¹ã«åŒã£ããããªãã£ãã§ããæææš©ãæ³šæãå¿ èŠã ãšæããŸãã
ã³ãŒããšããŠã¯modæããªããªã£ãŠuseæã®èšè¿°ãå°ãå€ããçšåºŠã§ããããã«ãã®èгç¹ã§èŠããšã³ã³ãã€ã«æéã®ççž®ãèŠèŸŒãŸãããŸãã
ä»åäœã£ããµã³ãã«çšåºŠã§ã¯ããŸãççž®ã®æ©æµã¯æããããŸããã§ããããå éšã¯ã¬ãŒãåäœã§ãã«ããã§ããã®ã§äžŠåã§éçºãåäœãã¹ããã§ããŸãã®ã§å€§èŠæš¡ãããžã§ã¯ãåãã®æ©èœããªããšæããŸãã
ã³ãŒããšããŠã¯åãã§ãããããã¡ã€ã«åå²ããããã®ãsolid_crate02ãšããŠäœã£ãŠã¿ãŸããã
solid_mod02ãšåæ§ã®ã¢ãããŒãã§ãã
ãŸãšã
ç°¡åã§ããã¯ã¬ãŒãåå²ã䜿ã£ãŠã¿ãææ³ã§ãã
| ã¢ãžã¥ãŒã«åå² | ã¯ã¬ãŒãåå² | |
|---|---|---|
| å岿¹æ³ | modæ | å éšã¯ã¬ãŒããworkspace |
| ãã«ã | ãã¡ã€ã«åäœã ãå šäœã®ã³ã³ãã€ã«ãå¿ èŠ | å
éšã¯ã¬ãŒãåäœã§å¯èœ 䞊è¡ã³ã³ãã€ã«ã§å šäœãã«ãã®æéççž®ã®å¯èœæ§ |
| ãã¹ã | åŸæ¥ãšåã | å éšã¯ã¬ãŒãåäœã§å¯èœ |
| ãã¡ãªãã | ãµãã¢ãžã¥ãŒã«ãæ·±ããããšé¢åãã | Cargo.tomlãè€æ°äœæãããŠããŸããworkspaceã§ç®¡çã§ãããèšè¿°éãå¢ããã |
| ãã®ä» | – | crates.ioã«å ¬éãããšããå éšã¯ã¬ãŒããå ¬éããã®ã§ããŒãã³ã°ã«æ°ãã€ããå¿ èŠããã |
DDDèªäœã®èãæ¹ã¯ãŸã çè§£ã§ããŠããªãéšåããããŸãããã³ã³ããŒãã³ãéã®å¢çãæç¢ºåãããŠããççµåã«ãªãå°è±¡ã§ãã
ãã¹ããæžããããæ°ãããŸããå šäœçãªèšè¿°éã¯å¢ããæ°ãããŸãã
第2éš TOC
GitHubã«ã³ãŒããã¢ããããŒãããŠããŸãã0.1.1ããŒãžã§ã³
ã³ãŒãã®ã³ã¡ã³ãã«æžãããŠããfirst_stepãªã©ãcargoã³ãã³ãã«æž¡ããšå®è¡ã§ããŸãã
# Example
$ cargo run --example first_step
Code language: Bash (bash)
