Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
値オブジェクトの悩みポイントとどう付き合っていくか
yachiy
July 30, 2019
Programming
1
1.2k
値オブジェクトの悩みポイントとどう付き合っていくか
yachiy
July 30, 2019
Tweet
Share
More Decks by yachiy
See All by yachiy
AWS事始め / Introduction AWS
yachiy
1
27
Springで始めるWebApplication / Start Spring Web Application
yachiy
0
78
RDRAとDDDを実践していく上でのCleanArchitectureの同異点 / RDRA and Clean Architecture differences
yachiy
0
110
Springで始める3層アーキテクチャ / start three layer architecture with spring
yachiy
0
51
議事録のとり方 / how to write proceeding
yachiy
0
150
Other Decks in Programming
See All in Programming
インフラエンジニアの多様性と評価、またはキャリアへのつなげ方 / Careers as infrastructure engineers
katsuhisa91
0
530
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-grapecity
grapecity_dev
0
130
テスト設計技法をなぜ&どのように使うのか体験しよう!
imtnd
0
350
全国の中高生がプログラミングを学んでいるCloud9環境の仕組み@JAWS-UG_SRE支部_#3
asache3
0
110
職場にPythonistaを増やす方法
soogie
0
320
Nix for Scala folks
kubukoz
0
130
Update from the Elixir team - 2022
whatyouhide
0
190
未経験QAの私が、よきQA(Question Asker) になっていく物語
atamaplus
0
220
Let's make a contract: the art of designing a Java API
mariofusco
0
160
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
3
1.8k
Jakarta EE 10 is Coming Your Way
ivargrimstad
0
2.6k
LOWYAの信頼性向上とNew Relic
kazumax55
4
360
Featured
See All Featured
Unsuck your backbone
ammeep
659
55k
The Invisible Customer
myddelton
110
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.6k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
212
11k
GraphQLとの向き合い方2022年版
quramy
16
8.1k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.4k
jQuery: Nuts, Bolts and Bling
dougneiner
56
6.4k
Designing with Data
zakiwarfel
91
3.9k
Support Driven Design
roundedbygravity
86
8.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
How GitHub (no longer) Works
holman
296
140k
Transcript
ΦϒδΣΫτͷΈϙΠϯτͱ Ͳ͏͖߹͍͔ͬͯ͘ !ZBDIJZ@
!ZBDIJZ@ IUUQTZBDIJZIBUFOBCMPHDPN ࠓճͷࢿྉࡌ͖ͤΕͳ͔ͬͨ ΈϙΠϯτͪ͜ΒͰڞ༗͠·͢ʂ
͢͜ͱ
None
wϞσϧͱ࣮ΛΑΓਂ݁͘ͼ͚ͭΔ wෳࡶͳίʔυΛ໌നͰ༧ଌͰ͖Δͷʹ͢Δ ΦϒδΣΫτΛ࣮͍ͯ͘͠ʹ͋ͨͬͯͷΈϙΠϯτ
Ͳ͜·Ͱܕͱͯ͠༻ҙ͢Δ͔ /VMMBCMFͳΛऔΓѻ͏߹ όϦσʔγϣϯͲ͜ʹॻ͔͘ (FUUFS4FUUFSΛॻ͖ͨ͘ͳ͍͕ར༻ଆͰ෦ͷΛࢀর͍ͨ͠ͱ͖Ͳ͏͢Δ͔ Ͳ͜·ͰίϨΫγϣϯΦϒδΣΫτΛ༻ҙ͢Δ͔ TUBUJDϑΝΫτϦϝιουΛ༻͍Δ͖͔ ύοέʔδߏͲ͏͢Δ͔ JOOFS$MBTTΛ͏͖͔൱͔ Έ͕ͪ ࡉ͔͍
Ͳ͜·Ͱܕͱͯ͠༻ҙ͢Δ͔
public class PersonName { private String firstName; private String lastName;
public String fullName() { return String.format("%s %s", firstName, lastName); } } ͜ͷ͘Β͍ͳΒಛʹ·ͳ͍ ྫͷࢀরݩɿ
public class PersonName { private String firstName; private String lastName;
public String fullName() { return String.format("%s %s", firstName, lastName); } } ݸผͷৼΔ͍ͳͦ͞͏ͳͷͰಛʹ·ͳ͍
public class PersonName { private String firstName; private String lastName;
private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } }
public class PersonName { private String firstName; private String lastName;
private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } ໊ࣈɺ໊લͱໟ৭͕ҧ͏ ˠݸผͷৼΔ͍͕͋Γͦ͏ ˠཁૉͷΦϒδΣΫτԽΛݕ౼
public class MiddleName { private static final int MIN_LENGTH =
1; private static final int MAX_LENGTH = 100; // null͕ೖΒͳ͍͜ͱݕূ͞Ε͍ͯΔఆ → ࢦఆ͕ͳ͍͜ͱۭจࣈͰදݱ private String value; // ίϯετϥΫλੜϝιουͰݕূ͢Δ͔ར༻ଆͰݕূ͔ͯ͠Β͔͢·ͨผͷΈϙΠϯτ… ... // ඞཁʹԠͯ͡༻ҙ public boolean isSpecified() { // value͕ۭจࣈͰͷੜڐͯ͠nullͰͷੜڐ͞ͳ͍ඞཁ͋Γ return !value.isEmpty(); } @Override public String toString() { return value; } ... }
public class MiddleName { private static final int MIN_LENGTH =
1; private static final int MAX_LENGTH = 100; // null͕ೖΒͳ͍͜ͱݕূ͞Ε͍ͯΔఆ → ࢦఆ͕ͳ͍͜ͱۭจࣈͰදݱ private String value; // ίϯετϥΫλੜϝιουͰݕূ͢Δ͔ར༻ଆͰݕূ͔ͯ͠Β͔͢·ͨผͷΈϙΠϯτ… ... // ඞཁʹԠͯ͡༻ҙ public boolean isSpecified() { // value͕ۭจࣈͰͷੜڐͯ͠nullͰͷੜڐ͞ͳ͍ඞཁ͋Γ return !value.isEmpty(); } @Override public String toString() { return value; } ... } ໊લ໊ࣈʹಉ༷ͷੑ࣭͋Γͦ͏ ˠ4USJOH͔ΒΦϒδΣΫτԽΛݕ౼ͯ͠ྑͦ͞͏ ͷൣғΛ੍ݶͯ͠ ϓϩάϥϜΛΘ͔Γ ҆͘͢શʹ
public class MiddleName { private static final int MIN_LENGTH =
1; private static final int MAX_LENGTH = 100; // null͕ೖΒͳ͍͜ͱݕূ͞Ε͍ͯΔఆ → ࢦఆ͕ͳ͍͜ͱۭจࣈͰදݱ private String value; // ίϯετϥΫλੜϝιουͰݕূ͢Δ͔ར༻ଆͰݕূ͔ͯ͠Β͔͢·ͨผͷΈϙΠϯτ… ... // ඞཁʹԠͯ͡༻ҙ public boolean isSpecified() { // value͕ۭจࣈͰͷੜڐͯ͠nullͰͷੜڐ͞ͳ͍ඞཁ͋Γ return !value.isEmpty(); } @Override public String toString() { return value; } ... } όϦσʔγϣϯΛͲ͜ʹஔ͔͘·ͨผͷΈϙΠϯτ
public class MiddleName { private static final int MIN_LENGTH =
1; private static final int MAX_LENGTH = 100; // null͕ೖΒͳ͍͜ͱݕূ͞Ε͍ͯΔఆ → ࢦఆ͕ͳ͍͜ͱۭจࣈͰදݱ private String value; // ίϯετϥΫλੜϝιουͰݕূ͢Δ͔ར༻ଆͰݕূ͔ͯ͠Β͔͢·ͨผͷΈϙΠϯτ… ... // ඞཁʹԠͯ͡༻ҙ public boolean isSpecified() { // value͕ۭจࣈͰͷੜڐͯ͠nullͰͷੜڐ͞ͳ͍ඞཁ͋Γ return !value.isEmpty(); } @Override public String toString() { return value; } ... } Ͳ͏ͯ͠ར༻ଆͰͷ͋Δͳ͠Λؾʹ͢ΔͳΒ࣮
public class PersonName { private FirstName firstName; private LastName lastName;
private MiddleName middleName; ... public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } }
public class PersonName { private FirstName firstName; private LastName lastName;
private MiddleName middleName; ... public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } ͜͜·Ͱຖճࡉ͔͘ΦϒδΣΫτԽ͢Δͷ͔
public class PersonName { private String firstName; private String lastName;
private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private FirstName firstName; private LastName lastName; private MiddleName middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } }
public class PersonName { private String firstName; private String lastName;
private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private FirstName firstName; private LastName lastName; private MiddleName middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private static final int MIN_FIRST_NAME_LANGTH = 1; private static final int MAX_FIRST_NAME_LENGTH = 100; private static final int MIN_MIDDLE_NAME_LENGTH = 1; private static final int MAX_MIDDLE_MAME_LENGTH = 100; private static final int MIN_LAST_NAME_LENGTH = 1; private static final int MAX_LAST_NAME_LENGTH = 100; private String firstName; private String lastName; private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } ্Ґ֓೦͕ߏཁૉͷ ͷൣғΛ୲อ
public class PersonName { private static final int MIN_FIRST_NAME_LANGTH =
1; private static final int MAX_FIRST_NAME_LENGTH = 100; private static final int MIN_MIDDLE_NAME_LENGTH = 1; private static final int MAX_MIDDLE_MAME_LENGTH = 100; private static final int MIN_LAST_NAME_LENGTH = 1; private static final int MAX_LAST_NAME_LENGTH = 100; private String firstName; private String lastName; private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private String firstName; private String lastName; private String middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private FirstName firstName; private LastName lastName; private MiddleName middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } public class PersonName { private FirstName firstName; private LastName lastName; private MiddleName middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } ্Ґ֓೦͕ߏཁૉͷ ͷൣғΛ୲อ ಛʹมΘΓͳ͠
ΦϒδΣΫτͷΛ͑ΒΕΔ ্Ґ֓೦͕ߏཁૉͷੑ࣭ৼΔ͍୲อ ͢Δඞཁ͕͋Γݟ௨͕͠˚ ্Ґ֓೦ͷݟ௨͕͠˕ ΦϒδΣΫτͷ͕૿͑Δ ʢதʹ΄΅ಉ͡Α͏ͳͷʣ ༻ҙ͞Ε͍ͯΔܕͷΈ ΦϒδΣΫτͷΈ
ΦϒδΣΫτͷΛ͑ΒΕΔ ্Ґ֓೦͕ߏཁૉͷੑ࣭ৼΔ͍୲อ ͢Δඞཁ͕͋Γݟ௨͕͠˚ ্Ґ֓೦ͷݟ௨͕͠˕ ΦϒδΣΫτͷ͕૿͑Δ ʢதʹ΄΅ಉ͡Α͏ͳͷʣ ༻ҙ͞Ε͍ͯΔܕͷΈ ΦϒδΣΫτͷΈ ͡Ό͋ϋΠϒϦουʁ
public class PersonName { private static final int MIN_FIRST_NAME_LANGTH =
1; private static final int MAX_FIRST_NAME_LENGTH = 100; private static final int MIN_LAST_NAME_LANGTH = 1; private static final int MAX_LAST_NAME_LENGTH = 100; private String firstName; private String lastName; private MiddleName middleName; public String fullName() { return String.format("%s %s %s", firstName, middleName, lastName); } } ϛυϧωʔϜ͚͕ͩಛघͱ͍͏ҙਤΘΓͦ͏ ཧղͷෛՙߴͦ͏
ཧ͢Δߏཁૉ͕ଟ͘ͳ͍͔ ɹɹˠ͕ͭʹͳ͍ͬͯΔ͔ ݸʑͷৼΔ͍ੑ࣭͕গͳ͍͔ ɹɹˠΦϒδΣΫτʹҠৡͨ͠΄͏͕γϯϓϧʹͳΒͳ͍͔ Λݕ౼ গͳ͘ͱͭͷ֓೦ͷதͰͲͪΒ͔ʹશʹ͢ ؾʹ͢Δ͜ͱ͕গͳ͍͏ͪ ·ͱΊͯऔΓѻ͏͜ͱʜ ؾʹ͢Δ͜ͱ͕ଟ͘ͳ͖ͬͯͨΒؔ৺ࣄ
͝ͱʹऔΓѻ͍͍ͨ
Ͳ͜·Ͱܕͱͯ͠༻ҙ͢Δ͔ /VMMBCMFͳΛऔΓѻ͏߹ όϦσʔγϣϯͲ͜ʹॻ͔͘ (FUUFS4FUUFSΛॻ͖ͨ͘ͳ͍͕ར༻ଆͰ෦ͷΛࢀর͍ͨ͠ͱ͖Ͳ͏͢Δ͔ Ͳ͜·ͰίϨΫγϣϯΦϒδΣΫτΛ༻ҙ͢Δ͔ TUBUJDϑΝΫτϦϝιουΛ༻͍Δ͖͔ ύοέʔδߏͲ͏͢Δ͔ JOOFS$MBTTΛ͏͖͔൱͔ Έ͕ͪ ࡉ͔͍
օ༷͕ͲͷΑ͏ʹߟ͑ͯɺͲ͏ͯͦ͠ͷ࣮ʹͨ͠ͷ͔ ͥͻͥͻɺ͓ฉ͔͍ͤͩ͘͞