TechBlog株式会社ホワイトプラスのエンジニアによる開発ブログです。2019の17日目の記事です。はじめにホワイトプラスが運営するリネットではドメイン駆動設計(DDD)を取り入れた開発をしています。2年前のアドベントカレンダーの記事でGoでDDDを実践するモデリングの記事を書きました。これはテスト駆動開発の書籍の内容を題材にしたのですが、今回は実際の現場で行った内容を題材にしてみます。お題「生産日程の算出」ホワイトプラスが運営するリネットはWebで申し込める宅配クリーニングです。システムはWebの申込みだけでなく、クリーニング工場の生産管理も含まれます。生産管理においては生産日程の算出は基本的な機能のひとつですが、それが今回のお題です。すべての設計をここで書くわけにもいかないので、今回は「工場に到着する日(=着荷日)の算出」をテーマにします。数式で着荷日がどう決まるのか。ユーザーが出した場所から工場到着までにかかる日数。住所や荷物を預けた時間で変わる。工場の定休日は荷物が届かないので、工場が営業する日までの日数。ユーザーが荷物を預けた日(集荷日)を基準として、配送にかかる日数や工場定休日の調整などをして工場への荷物の到着日(着荷日)がきまります。モデリング型定義モデリングを始めるにあたって、まずは出てきた言葉を素直に型にしていきます。}}それぞれ独自の型を定義し、内部的には日付計算、日数の算出を行う型に処理を委譲していきます。methodを作成して算出ロジックの実装をしていきます。}}最初に出した式を素直に実装できます。パラメーターで渡していますが、実はこれはできません。いうと、工場定休日の調整は集荷日+配送日数で算出した日が工場定休日かどうかを基準にして出されるものだからです。いう場合にどうしているかというと、ドメインサービスを導入しています。DayCount;}こうすることで、後から決まるものに対して必要な処理を注入できます。まとめDDDでモデリングを進めるポイントはいかに焦点を絞れるかだと思っています。今回は「着荷日の算出」に焦点を合わせ、配送日数や工場調整日数の算出は出来るものとして一旦考慮の外に置いてます。実際には配送日数や工場調整日数の算出も結構な機能になるのですが、着荷日の算出においてはそれらの結果だけが必要なのでいかに問題を分割できるかがロジックの見通しを良くします。手続き型からモデリングへの変換は考え方も大きく変える必要がありますが、今回の例が少しでも参考になれば幸いです。Reservedスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。