俺たちのドメイン駆動設計はこれからだ!

51be5bc5c2fd89fa5dae93377efa3bdd?s=47 Honya
May 18, 2019

 俺たちのドメイン駆動設計はこれからだ!

ドメイン駆動設計に取り組んだ事例をもとに以下の点について説明しました。
1. ドメイン駆動設計とは一体何か?
2. どんなメリットがあるのか?
3. ドメインモデルについて
4. 設計パターンについて
5. ドメイン層の隔離について

51be5bc5c2fd89fa5dae93377efa3bdd?s=128

Honya

May 18, 2019
Tweet

Transcript

  1. 7.

    όοΫΤϯυ ϑϩϯτΤϯυ DTO DTO DTO DTO DTO DTO DTO DTO

    DTO DTO ϩδοΫ σʔλϕʔε ϩδοΫ ϩδοΫ
  2. 8.

    όοΫΤϯυ ϑϩϯτΤϯυ DTO DTO DTO DTO DTO DTO DTO DTO

    DTO DTO ϩδοΫ σʔλϕʔε ϩδοΫ ϩδοΫ ෳࡶʹͳͬͯ͘Δ…
  3. 9.

    όοΫΤϯυ ϑϩϯτΤϯυ DTO DTO DTO DTO DTO DTO DTO DTO

    DTO DTO ϩδοΫ σʔλϕʔε ϩδοΫ ϩδοΫ ࢓༷มߋ ෳࡶʹͳͬͯ͘Δ…
  4. 10.

    όοΫΤϯυ ϑϩϯτΤϯυ DTO DTO DTO DTO DTO DTO DTO DTO

    DTO DTO ϩδοΫ σʔλϕʔε ϩδοΫ ϩδοΫ ࢓༷มߋ ෳࡶʹͳͬͯ͘Δ…
  5. 35.

    ௒ॏཁ 1. ͓٬͞Μͷۀ຿ͷษڧ 2. γεςϜԽର৅ྖҬͷ֓೦ͷ੔ཧ 3. ॏཁͳ֓೦͔ΒϞσϧΛ࡞੒ ๏ γεςϜԽର৅ྖҬ͚ͩͰ͸ͳ͘ɺͦͷपลͷ஌ࣝ΋ؚΊΔ ๏

    γεςϜʹஔ͖׵͑ͨΒͲ͏ͳΔ͔ʁ͸ߟ͑ͳ͍Α͏ʹ͢Δ ๏ ໊ࢺɺಈࢺΛத৺ʹ ๏ ʮ΋ͷʯ͚ͩͰͳ͘ɺϓϩηεʹ΋ண໨͢Δ ๏ ͍͖ͳΓ׬ᘳͳϞσϧ͸ग़ͯ͜ͳ͍ͱׂΓ੾Δ͜ͱ͕େ੾
  6. 41.

    public class User { private final Long id; private String

    firstName; private String lastName; public Person(Long id, String firstName, String lastName) { … } public boolean isIdentifiedBy(Person otherPerson) { return this.id == otherPerson.id; } } ҰҙʹͳΔID IDΛ༻͍ͯ ಉҰੑΛൺֱ͢Δ ϝιου
  7. 44.

    public class NumberOfPages { private final int number; public NumberOfPages(int

    value) { … } public boolean isSameValueAs(NumberOfPages otherValueObject) { return this.number == otherValueObject.number; } } ϑΟʔϧυͷ஋Λ࢖༻͠ ಉ஋ੑΛൺֱ͢Δϝιου ҰҙʹͳΔID͸࣋ͨͳ͍
  8. 47.

    public class RentalService { // ૹۚ public static Rental rentalBook(

    User rentalUser, Book rentalBook) { // ି͠ग़ͤΔ͔֬ೝ if (!RentalPolicy.canRental(rentalUser, rentalBook)) throw new IllegalArgumentException(); // ି͠ग़͢ Rental rental = rentalUser.rental(rentalBook); return rental; } } Ϋϥεϝιου ͱ࣮ͯ͠૷͠ಛఆͷ֓೦͔Β෼཭