$30 off During Our Annual Pro Sale. View Details »

レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy

suzuki-hoge
November 07, 2024

 レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy

レガシーシステムにどう立ち向かうか
複雑さと理想と現実

2024/11/06

【挑戦者必見!】DDDで複雑なシステムをリアーキテクチャをした1年の体験談withミライトデザインhttps://asken.connpass.com/event/332947/

suzuki-hoge

November 07, 2024
Tweet

More Decks by suzuki-hoge

Other Decks in Programming

Transcript

  1. ͍Ζ͍ΖΞ΢τϓοτ͍ͯ͠·͢ • Zenn ʹهࣄΛॻ͍ͨΓ YouTube ʹಈըΛ্͛ͨΓ͍ͯ͠·͢ 
 
 
 


    
 
 • ࠓ೥ͷ೥࢝ʹल࿨γεςϜ༷͔Β 
 Docker ͷຊΛग़൛͍͖ͤͯͨͩ͞·ͨ͠
  2. ୯७ͳݴޠͷ຋༁ͩͬͨΒ͜͏ • PHP • if • for • class •

    F5 Ͱίʔυ֬ೝ • Kotlin • if • map / f ilter • data class • let, also • ίϯύΠϧͰίʔυ֬ೝ
  3. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ Interface

    Class QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ
  4. ʮෳࡶʯͳ΋ͷʹ໨ΛΉ͚Δ • େ͖͍΋ͷʹ͸ཱͪ޲͔͑ͳ͍ͷͰɺʮෳࡶʯΛ෼ྨͯ͠ΈΔ • ࢓༷ͷʮෳࡶʯ͞ • ݴ༿ͷʮෳࡶʯ͞ • ίʔυͷʮෳࡶʯ͞ •

    σʔλͷʮෳࡶʯ͞ • ͦΕͧΕͷʮෳࡶʯʹ͍ͭͯߟ͑ͭͭɺ͋Θͤͯʮཧ૝ʯ΋ೝࣝ͢Δ • ࠓ೔ͷ಺༰ʹ͍͓ͭͯ͜ͱΘΓ • ࢓༷΋ίʔυ΋ͦΕͬΆ͍͚ͩͰݫີʹ͸ຊ෺Ͱ͸͋Γ·ͤΜ • ͦͯ͠࢓༷΋ίʔυ΋΋ͬͱ΋ͬͱͣͬͱͣͬͱ೉ఢͰ͢
  5. ίʔυΛಡΉͱ͖ʹਅʹ΍Δ΂͖͜ͱ 基礎代謝 = 0 if ( Request Body に基礎代謝がある )

    { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(体重) } • ࣈ໘ΛಡΉ͜ͱɺͰ͸ͳ͍ • ม਺Λ౰ͯ͸ΊΔ͜ͱɺͰ΋ͳ͍ • ෼ذΛ௥͍͔͚Δ͜ͱɺͰ΋ͳ͍ • ʮԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ʯ ஌Δ͜ͱ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  6. ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある )

    { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  7. ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある )

    { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  8. ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある )

    { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  9. ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある )

    { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  10. ͞Βʹ౿ΈࠐΉͱ • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ •

    ࣗ෼Ͱଌͬͯࣗ෼Ͱઃఆ͍͍ͯ͠ • ඍม͠ͳ͍Α͏͋Δఔ౓ݻఆ͢Δ • େ͖͘ମॏ͕૿ݮ͍ͯ͠Ε͹࠶ܭࢉ • Θ͔Βͳ͍ਓʹ͸ఏࣔͯ͋͛͠Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  11. ͜͏͍͏͜ͱ΋ʮجૅ୅ँͷ࢓༷ʯ • جૅ୅ँ͸ʮ܎਺ A + ܎਺ B x ମॏ +

    ܎਺ C x ೥ྸ...ʯͷʮ੔਺ 4 ܻʯ • ͜Ε͸஋ͷઆ໌͔͍ͯ͠͠ͳ͍ • αʔϏεʹ͓͚Δѻ͍ɺܾ·Γํɺෆඋ΍ෆਖ਼ɺࢉग़ࣜͳͲ͢΂͕ͯ࢓༷ • ஋ͷઆ໌ ( ࣜ΍ܻ਺ ) Λ·ͱΊΔͱཧղͨ͠ؾʹͳΔ͚Ͳɺෆे෼ • ʮ࠷ޙʹܭࢉ͔ͯ͠Β஀ੜ೔Λܴ͑ͨΒͲ͏ͳΔͷʁʯ • ʮอ݈ࢦಋΛड͚ͨΒͲ͏ͳΔͷʁʯ • ʮࣜͱܻ਺Λ஌ͬͯΔʯ͚ͩͰ͸౴͑ΒΕͳ͍
  12. ࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ •

    ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ
  13. ࢓༷ͱݴ༿ͷؔ܎Λͻͨ͢Β੔ཧ͢Δ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ܭࢉ༻ମॏ ਎௕ ೛৷લମॏ

    ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  14. ͱ͋ΔίʔυΛ৭෼͚ͯ͠ΈΔ Request Body の受け取り if ( バリデーションエラー ) { 400

    レスポンス } 基礎代謝 = { たくさんのとても複雑なロジック } if ( 基礎代謝が適正範囲外 ) { 400 レスポンス } 基礎代謝テーブルを更新() ペースやがんばり方を計算() 1 日の消費カロリーを計算() 1 日の摂取カロリーを計算() カロリーテーブルを更新() Response Body の作成 ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  15. ͱ͋ΔίʔυΛ৭෼͚ͯ͠ΈΔ Request Body の受け取り if ( バリデーションエラー ) { 400

    レスポンス } 基礎代謝 = { たくさんのとても複雑なロジック } if ( 基礎代謝が適正範囲外 ) { 400 レスポンス } 基礎代謝テーブルを更新() ペースやがんばり方を計算() 1 日の消費カロリーを計算() 1 日の摂取カロリーを計算() カロリーテーブルを更新() Response Body の作成 ϑϨʔϜϫʔΫͷίʔυ ϑϨʔϜϫʔΫͷίʔυ HTTP ͷίʔυ ϝΠϯϩδοΫ ϝΠϯϩδοΫ DB ॲཧ DB ॲཧ Ψʔυॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  16. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService

    QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ Interface Class
  17. ϨΠϠʔ෼཭͕Ͱ͖ͯΔͬΆ͍ίʔυ // 体重を入力したら +10 点 ポイント = 0 record =

    体テーブル参照(今日) if ( record !== null && record.体重 !== null && record.体重 !== 0 ) { ポイント += 10 } import orm function 体テーブル参照(日付) { return orm.select(...) } DB ૢ࡞ͷॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  18. ஋ͱҰॹʹ஌ࣝ΋͖͍࣋ͬͯͯΔ // 体重を入力したら +10 点 ポイント = 0 record =

    体テーブル参照(今日) if ( record !== null && record.体重 !== null && record.体重 !== 0 ) { ポイント += 10 } import orm function 体テーブル参照(日付) { return orm.select(...) } ߦ͕ͳ͍͜ͱ͕͋Δ not null ੍໿͕ͳ͍ 0 ͕ೖ͍ͬͯΔ͜ͱ͕͋Δ͕ະೖྗͱͯ͠ѻ͏ DB ૢ࡞ͷॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  19. ϨΠϠʔ෼཭͸஌ࣝͷ෼཭ • ʮSQL Λॻ͍͍ͯͳ͍ͷͰ DB ʹ͸ґଘ͍ͯ͠ͳ͍ʯͱ͸ݶΒͳ͍ • ʮಘ఺ܭࢉͷίʔυΛಡ΋͏ͱࢥͬͨΒ DB ࢓༷ॻΛݟ͍ͯͨʯ

    • ͜Μͳ΋ͷ͸ҰྫͰɺϓϩδΣΫτͷਵॴͰൃੜ͢Δ • ʮجૅ୅ँͷܭࢉࣜΛಡΉ͸͕ͣ API ࢓༷ॻΛ୳͍ͯͨ͠ʯ • ผϨΠϠʔͷ஌ࣝ͸ৗʹ࿙Εग़Α͏ͱ͍ͯ͠Δ • ίϯύΠϧ΍੩తղੳʹύε͢Δ͜ͱ͕ϨΠϠʔ෼཭Ͱ͸ͳ͍ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··ίʔυΛ࢖͑Δঢ়ଶ͕෼཭
  20. ࣅ͍ͯΔίʔυ function カロリー計算() { if(記録された体重がある){ 体重 = 記録.体重 } else

    { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return カロリー計算(基礎代謝) } function 妊婦用カロリー計算() { 体重 = 妊娠.妊娠時体重 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return 妊婦用カロリー計算(基礎代謝) } ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  21. ࣅ͍ͯΔίʔυ function カロリー計算() { if(記録された体重がある){ 体重 = 記録.体重 } else

    { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return カロリー計算(基礎代謝) } function 妊婦用カロリー計算() { 体重 = 妊娠.妊娠時体重 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return 妊婦用カロリー計算(基礎代謝) } ಉ͡ ྲྀΕ͸ࣅͯΔ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  22. ࠞͥΔͱͲ͏ͳΔ͔ function カロリー計算() { if(妊娠中){ 体重 = 妊娠.妊娠時体重 } else

    { if 記録された体重がある { 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } } 基礎代謝 = { 長い処理 } return if(妊娠中){ 妊婦用カロリー計算(基礎代謝) } else { カロリー計算(基礎代謝) } } • ͓ͦΒ͘೔ຊதͰΑ͘ΈΔߏ଄ͷίʔυ • ܗͰڞ௨Խ͍ͯ͠Δ 1. ମॏΛܾΊͯ 2. جૅ୅ँΛग़ͯ͠ 3. ΧϩϦʔܭࢉࣜΛ࢖͏ • ৭Λ͚ͭΔͱෆࣗવ͞͸Ұ໨ྎવ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  23. ࠞͥΔͱͲ͏ͳΔ͔ function カロリー計算() { if(妊娠中){ 体重 = 妊娠.妊娠時体重 } else

    { if 記録された体重がある { 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } } 基礎代謝 = { 長い処理 } return if(妊娠中){ 妊婦用カロリー計算(基礎代謝) } else { カロリー計算(基礎代謝) } } • ަΘΒͳ͍ 2 ͭͷίʔυ͕ 1 Օॴʹ͋Δ • ͨͩͦΕ͚ͩ • ʮ͋Δ 1 ࢓༷ͷόϦΤʔγϣϯʯͰ͸ͳ͘ 
 ʮίʔυ͕ 2 ͭ͋Δʯ͚ͩ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  24. ಉ͡࢓༷͔Ͳ͏͔ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ

    ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  25. ͜Μͳڞ௨ॲཧ͕࢖͍΍͍͢͸͕ͣͳ͍ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ

    ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  26. ίʔυʹ͢ΔͳΒ͜͜Ͱ͠ΐ ೥ྸ ਎௕ ೛৷લମॏ ੑผ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ɹɹ ɹ೛්ͷ࢓༷

    ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  27. ࢖༻͢ΔλΠϛϯάʹΑͬͯ஋ͷҧ͏ม਺ 体重 = 0 if(Request Body に体重がある){ 体重 = Request

    Body のやつ } 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • ମॏ͕গͣͭ͠ग़དྷ্͕͍ͬͯ͘ • ݸਓతʹ͜ΕΛʮӕ 1 ߦʯͱݺΜͰ͍Δ • 1 ߦ ʹ 1 ߦ෼ͷՁ஋͕ͳ͍ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  28. ࢖༻͢ΔλΠϛϯάʹΑͬͯ஋ͷҧ͏ม਺ 体重 = 0 if(Request Body に体重がある){ 体重 = Request

    Body のやつ } 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • όάͷԹচ • ࣄނΛى͜͢ʹܾ·͍ͬͯΔ • ಡΈखͷෛՙ΋ߴ͍ • جૅ୅ँͷ͸ͳ͠ΛಡΜͰ͍ͨͷʹ 
 ٸʹମॏͷ͸ͳ͕࢝͠·ͬͯ೴͕ڻ͘ ͜͜Ͱମॏ͕࢖͍ͨ͘ͳͬͨΒʁ ͜͜Λܦ༝ͨ͋͠ͱͰମॏ͕࢖͍ͨ͘ͳͬͨΒʁ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  29. ਅʹ̍ߦͳΒແ͔׬੒඼ 体重 = Request Body にある ? それ : DB

    から取得 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • ຊ౰ͷ 1 ߦͱ͸͜͏ • ݟͨ໨ͷߦ਺Ͱ͸ͳ͘ɺ 
 ҙຯͱͯ͠ෆՄ෼ͷ࠷খͷ 1 ·ͱ·Γ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  30. ݁ہɺ࢓༷ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ

    ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  31. ࠷খ୯Ґ͸࢓༷ • ม਺Λ࡞Δաఔ͸ࡽ͞ͳ͍ • ʮܭࢉ༻ମॏͱ͸ʙͰ͋Δʯͱ͍͏આ໌Ͳ͓Γʹ࣮૷͢Δ • ͦ΋ͦ΋੔ཧͨ͠࢓༷ʹʮॳظԽͯ͠ͳ͚Ε͹ʯͱ͔ॻ͍ͯͳ͍ • ܭࢉ༻ମॏ =

    { ͻͱ·ͱ·Γ } • جૅ୅ँ = { ͻͱ·ͱ·Γ } • ͦ͏͍͏ίʔυΛॻ͘ʹ͸ɺ݁ہʮܭࢉ༻ମॏͱ͸ʙʙͰ͋Δʯͱ 
 ࣗવݴޠͰઆ໌Ͱ͖ͳ͚Ε͹ॻ͚ͳ͍
  32. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ
  33. ଘࡏ͢Δ͸͕ͣͳ͍஋ • ͨͱ͑͹ʮ਎௕͕ 0cmʯ • ݱ࣮తʹ͸͋Γ͑ͳ͍ • BMI ͷܭࢉ (

    ମॏ / ਎௕ / ਎௕ ) ͢Δͱ͖ࠔΔ • ਎௕͸ 0 ʹ͸ͳΒͳ͍ʮ͸ͣʯ • ͨͱ͑͹ʮ9/2 ͷ 7:00 ʹ৸ͯɺ9/1 ͷ 23:00 ʹى͖ͨʯ • ͜Ε΋͋Γ͑ͳ͍ • ਭ຾͕࣌ؒ -8 ࣌ؒʹͳͬͯ͠·͏ • ब৸࣌ؒ < ىচ࣌ؒͷʮ͸ͣʯ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  34. ʮ͸ͣʯͱͲ͏෇͖߹͏͔ • height Λ࢖͏ͱ͖ • 0 Ͱ͸ͳ͍ͱ৴͡Δ • ҰԠ 0

    νΣοΫ͢Δ • sleepStart ͱ sleepEnd Λ࢖͏ͱ͖ • sleepStart < sleepEnd ͱ৴͡Δ • ҰԠ͘Β΂ͯΈΔ
  35. ϓϩάϥϜ ମࢷ๱཰͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ੑผ͓͔͍͔͠΋ ʮ͸ͣʯʹਓ͕ؒϧʔϧͰରԠ͢Δͷ͸ແཧ ਎௕͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ਭ຾͓͔͍͔࣌ؒ͠΋ ੑผ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋

    جૅ୅ँ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ جૅ୅ँ͓͔͍͔͠΋ ΧϩϦʔ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ೥ྸ͓͔͍͔͠΋ ମॏ͓͔͍͔͠΋
  36. ෆਖ਼ͳ Value Object ͕ੜ·Εͳ͍Α͏ʹ͢Δ class 身長(value: Double) { コンストラクタ(value: Double)

    { assert(value != 0) this.value = value } } • ͨͩ͜Ε͚ͩ • 100% ৴པͰ͖Δ • ਵॴͷνΣοΫίʔυΛҰ૟Ͱ͖Δ • ಡΈखͷෛ୲΋΁Δ • ίʔυϨϏϡʔ࣌ʹ΋๨Ε͍͍ͯ • όά ( e.g. zero div ) ͷՄೳੑ͕΁Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  37. ҰํͰɺ୯ମͰ͸൑அͰ͖ͳ͍஋͕͋Δ • ͨͱ͑͹ʮ૿ྔ͔ͭӡಈத৺ʯ • ݮྔ / ૿ྔ ΋ ӡಈத৺ /

    ৯ࣄத৺ ΋͋Δ • ʮ৯ࣄΛݮΒͯ͠ݮྔ͢Δʯͷ͸͍͍͚Ͳ 
 ʮӡಈΛݮΒͯ͠૿ྔ͢Δʯͷ͸ෆ݈߁͔ͩΒ૊Έ߹Θ͕ͤѱ͍ • ͨͱ͑͹ʮ50kg Λ໨ࢦ͢ʯ • 140cm ͷਓͳΒʮద੾ͳμΠΤοτʯ • 170cm ͷਓͳΒʮ૫ͤ͗ͯ͢ೝΊΒΕͳ͍ʯͷͰঢ়گ͕ѱ͍ • ஋ͦͷ΋ͷʹྑ͠ѱ͕͠ͳ͘ɺ૊Έ߹Θͤ΍ঢ়گʹΑܾͬͯ·Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  38. ࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ •

    ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ
  39. ࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ •

    ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ )
  40. ࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ •

    ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ ) ɹͻͨ͢Β੔ཧ͢Δ͔͠ͳ͍ ɹίʔυͷஅยΛ·ͱΊɺ ɹղऍ͠ɺӫཆ࢜͞Μͱ͸ͳ͢
  41. ࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ •

    ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ ) ɹͻͨ͢Β੔ཧ͢Δ͔͠ͳ͍ ɹίʔυͷஅยΛ·ͱΊɺ ɹղऍ͠ɺӫཆ࢜͞Μͱ͸ͳ͢ ɹRDRA Ͱ੔ཧͰ͖͸͡Ί͍ͯΔ ɹPHP ΛಡΈɺཧղͯ͠੔ཧ ɹͯ͠ɺࣗવݴޠԽ͢Δ ɹ૯߹తͳྗͱܦݧ͕ඞཁͰɺ ɹ͙͢શһͰ͖Δ΋ͷͰ͸ͳ͍
  42. ͪΌΜͱ RDRA Λଓ͚Δͱ݁ߏΘ͔Δ ը૾͸ΠϝʔδͰ͢ ( ͱͯ΋ͦͷ··ܝࡌͰ͖ͣ... ) ੔ཧͰ͖ͨ UC ͕૿͑Δͱ

    ؔ࿈͕ͩΜͩΜݟ͑ͯ͘Δ ࢓༷੔ཧͱͯ͠ӡ༻͢Ε͹ ҙ֎ͱՃච΍ϝϯς͸ؾָ ( ࢓༷ॻͩͱࢥ͏ͱপ )
  43. ୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ

    ɹͱͯ΋ҙࣝͯ͠ߦ͍͑ͯΔ ɹSlack ΍ϝϞாͰུ͑ͣ͞͞ ɹܾΊͨ୯ޠΛ࢖ͬͯॻ͍͍ͯΔ ɹపఈͯ֓͠೦ϞσϦϯάΛ͢Δ
  44. పఈͯ֓͠೦ϞσϦϯά͢Δ ɹϒϨΠΫεϧʔ͕ى͜Δ ( ຊ౰ ) ɹ΍Ε͹΍Δ΄Ͳཧղ౓͕ਂ·Δ ɹPHP ΍ DB ͔Β࢓༷໘͚ͩΛ

    ɹநग़͢Δͷ͸͔ͳΓ೉͍͠ ɹͲ͏ͯ͠΋͙͢ந৅Խ΍ڞ௨Խ ɹʹҙ͕ࣝҳΕͯͯ͠͠·͏ͷͰ ɹ͔ͳΓͷ܇࿅͕ඞཁ
  45. ֓೦ϞσϦϯάதͷ͋Δ͋Δ • ʮը໘ A Ͱ͸ମॏνΣοΫ͕ < ͚ͩͲɺը໘ B Ͱ͸ <=

    ͩͬͨʯ • ʮ֓೦Ϟσϧʹ ԋࢉࢠ ͱ͍͏ interface Λ࡞Γ LT ͱ LE Λ࣮૷͢Δʯ • ʮ͍΍͍΍ɺӫཆ࢜͞Μ͸ LT ͱ LE ͬͯ࢖͍ํͯ͠Δͷʁʯ • ʮҙຯ͕͋ΔߦҝͳΒཧղ໊ͯ͠લΛݟग़͢ɺͳ͚Ε͹ͨͩͷཚΕʯ • Ͳ͏ͯ͠΋ PHP ͷ࣮૷Λͦͷ··Ҡ২ͯ͠͠·͍͕ͪ • PHP → நग़ͨ͠࢓༷ → Kotlin Λ͠ͳ͚Ε͹͍͚ͳ͍ ෳ਺ͷ࿩ΛϚʔδͨ͠ϑΟΫγϣϯͰɺಛఆݸਓͷ࿩Ͱ͸͋Γ·ͤΜ
  46. ୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ

    ɹపఈͯ֓͠೦ϞσϦϯάΛ͢Δ ɹಠཱ෦ୂͳͷͰ·ͩہॴత ɹʮԿਓ͔Ͱ΍ͬͯ·͢ʯ ɹ͘Β͍ͷن໛ײͰࣾ಺શҬ ɹʹݴ༿Λਁಁͤ͞Δͷ͸ ɹݱ࣮తʹ͸ແཧ ɹݱ࣌఺Ͱ͸ʮྡਓ·Ͱʯ ɹͱͯ΋ҙࣝͯ͠ߦ͍͑ͯΔ ɹSlack ΍ϝϞாͰུ͑ͣ͞͞ ɹܾΊͨ୯ޠΛ࢖ͬͯॻ͍͍ͯΔ ɹPHP ΍ DB ͔Β࢓༷໘͚ͩΛ ɹநग़͢Δͷ͸͔ͳΓ೉͍͠ ɹͲ͏ͯ͠΋͙͢ந৅Խ΍ڞ௨Խ ɹʹҙ͕ࣝҳΕͯͯ͠͠·͏ͷͰ ɹ͔ͳΓͷ܇࿅͕ඞཁ
  47. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ
  48. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ
  49. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService

    QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ Interface Class
  50. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠
  51. ίʔσΟϯάதͷ͋Δ͋Δ • ʮυϝΠϯϞσϧͷ HashMap ʹ Any ͕ग़͖ͯͪΌ͏ʯ • ʮDB ʹ

    Json ͰೖͬͯΔ͔Β...ʯ • ʮ͡Ό͋ͦΕ͸ DB ͷ͸ͳ͠ʯ • ʮ΄Μͱ͏ʹѻ͍͍ͨ΋ͷ͸ͳʹʁʯ • Αͦͷ஌ࣝ͸΄Μͱ͏ʹ؆୯ʹ͙͢࿙ΕΔ • ूΊͨ஌ࣝͷ࠶഑ஔΛҙࣝ͠ଓ͚Δͷ͸೉͍͠ ෳ਺ͷ࿩ΛϚʔδͨ͠ϑΟΫγϣϯͰɺಛఆݸਓͷ࿩Ͱ͸͋Γ·ͤΜ
  52. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠ ɹ஋ͳΒ؆୯
  53. • աڈʹઃఆ͍ͯ͠Ε͹ DB ࢀর • อଘ͞Ε͍ͯΔجૅ୅ँ͕ దਖ਼͔νΣοΫ • దਖ਼ͱ͸... •

    ະઃఆͳΒମॏͰܭࢉ • ܭࢉʹ࢖͏ମॏ͸... • ମॏΛه࿥͍ͯ͠Ε͹ DB ࢀর • ׈ΓࢭΊͱͯ͠ඪ४ମॏ Λ·ͣܭࢉ • ਎௕ɾ೥ྸ͕ඞཁ ͳͷͰ DB ࢀর • ... ʮجૅ୅ँͱ͸ʯ ɹαʔϏε࢓༷ͬΆ͍΋ͷͱ ɹIO ͕ਂ͘བྷΈ߹ͬͨ৔߹ɺ ɹυϝΠϯʹ΋ΫΤϦʹ΋ ɹॻ͖ʹ͍͘
  54. ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ

    ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠ ɹ஋ͳΒ؆୯ ɹࢀর༻ͷυϝΠϯϞσϧͷ ɹΑ͏ͳ΋ͷ͕ඞཁͩͱߟ͑ͨ ɹαʔϏε࢓༷ͬΆ͍΋ͷͱ ɹIO ͕ਂ͘བྷΈ߹ͬͨ৔߹ɺ ɹυϝΠϯʹ΋ΫΤϦʹ΋ ɹॻ͖ʹ͍͘
  55. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ Interface

    Class QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ QueryModel QueryModelImpl ɹϩδοΫͱ IO Λڐ͞ΕΔ ɹࢀরʹݶఆͨ͠ package ͕Ͱ͖ͨ ɹΞϨϯδͳͷͰಛʹઆ໌͕ඞཁ
  56. σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍

    0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ
  57. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService

    QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ ɹపఈͯ͠υϝΠϯΛ ɹʮਖ਼͍͠ʯ΋ͷʹ͢Δ Interface Class
  58. σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍

    0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ
  59. σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍

    0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ ɹ૚͕૝ఆ௨Γػೳͨ͠ ɹΫΤϦ͸Ϡό͘ͳΔ
  60. Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService

    QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ ɹͶ͡ΕΛௐ੔͢Δ͜͜ͷ ɹΫΤϦ͕ෳࡶʹͳΓ΍͍͢ ɹR/W ճ਺͸࠷దԽ͠ʹ͍͘ Interface Class
  61. σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍

    0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹ৽ͨʹੜ·Εͳ͘ͳͬͯ΋ ɹաڈͷσʔλ͸ύλʔϯ͕ແݶ ɹޙํޓ׵ͷέΞ͕ඞཁ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ ɹ૚͕૝ఆ௨Γػೳͨ͠ ɹΫΤϦ͸Ϡό͘ͳΔ
  62. σʔλνΣοΫதͷ͋Δ͋Δ • ʮμΠΤοτΛୡ੒ͨ͠ܗ੻͕͋Δͷʹମॏ͕อଘ͞Εͯͳ͍ʯ • ʮෳ਺ͷςʔϒϧʹ·͕ͨΔෆਖ਼ͳΜͯύλʔϯ͕ແݶͰ୳͖͠Εͳ͍ʯ • ʮ਎௕͕ 200cm ͳͷʹମॏ͕ 50kg

    ͔͠ͳ͍ʯ • ʮςʔϒϧతʹ͓͔͘͠ͳͯ͘΋ BMI ͕ҟৗ஋ʯ • ਖ਼௚ΘΓͱͲ͏͠Α͏΋ͳ͍ͷͰɺΨʔυΛ؇ΊͨΓσʔλύονͨ͠Γ͢Δ • ݎ࿚ੑͱϦεΫճආͱ౤ࢿίετͷτϨʔυΦϑΛ൑அ͠ଓ͚Δ͔͠ͳ͍ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢
  63. ͍͍͜ͱ • ࢓༷ཧղ౓͕֨ஈʹ͕͋Δ • ϒϨΠΫεϧʔ͕සൃ͢Δ • ࢓༷ͷυΩϡϝϯτԽ΋ϓϩηεʹೖ͓ͬͯΓɺͪΌΜͱͨ·͍ͬͯ͘ • ίʔυ͕࣮֬ʹΑ͘ͳ͍ͬͯΔ •

    ʮසग़͢Δ 50 ߦͷṖίʔυʯ͕ʮݱࡏମॏͷऔಘʯʹੜ·ΕมΘͬͨ • େํ਑͸ڌΓॴʹͳΔ • ઃܭ͔Β࣮૷·Ͱେ͖ͳํ਑͕͋ΔͷͰɺʮ͍͍ʯͷํ޲͕ϒϨʹ͍͘
  64. Ή͔͍ͣ͜͠ͱ • ίετ͸େ͖͍ • ࢓༷ͷཧղͱ੔ཧɺͦͷޙͷઃܭ͸΋ͷ͍͕͔͔࣌ؒ͢͝Δ • ਺ϲ݄ͰͰ͖ΔΑ͏ʹͳΔ΋ͷͰ͸ͳ͘ɺεϐʔυͷग़ͳ͍ظ͕ؒଓ͖͕ͪ • ׆ಈͷՁ஋͸ݟࣦΘͳ͍Α͏ʹ͍ͨ͠ •

    ͙͢ޮՌͷग़ʹ͍͘ੑ࣭ͷ׆ಈͳͷͰɺԿΛՁ஋ͱ͢Δ͔ݟࣦΘͳ͍Α͏ʹ͍ͨ͠ • ʮίʔυ͕Α͘ͳͬͨʯ͚ͩͰ͸౤ࢿ͠ଓ͚ͯ΋Β͑ͳ͍ • ձࣾͷʮਏ͍ʯ͕มΘͬͨͱ͖ʹ൓ԠͰ͖ͳ͍ͱɺ׆ಈͷՁ஋͕ܹݮ͢Δ • ࣭ͱεϐʔυͷτϨʔυΦϑ൑அ͕ࠓޙͷ՝୊ • ϋΠϦλʔϯɾϋΠίετͱ͍͏ͷΛ࣮ײ͢Δ • ͢΂ͯͷػೳ΍υϝΠϯΛ௒ίΞϩδοΫͱಉ͡࡞ΓࠐΈΛ͢Δͷ͔