Open10

[Wip]DDDのメモ

ところがどっこいところがどっこい

ドメインモデル

  • ドメイン
    • アプリケーションが対象とする業務活動全体
  • ドメインモデル
    • ドメインの問題を解決するモデル
    • 業務データと業務ロジックを1つにまとめてある

境界づけられたコンテキスト

  • 特定のモデルを定義・適用する境界を明示的に示したもの
    • 例えば、商品は扱う部署によって定義が異なる
      • 販売部: 商品
        • 商品名、売値、在庫数
      • 配送部: 商品
        • 商品名、配送先、配送状況
  • システムが大規模になるほど、関係者全てで統一したモデルを作ることは難しくなる
  • 境界づけられたコンテキストは言語的な境界となる
ところがどっこいところがどっこい

ユビキタス言語

  • 認識の齟齬や翻訳にコストをかけないための共通言語
    • 開発者間だけで通じる言葉とかは使わない
  • 会話・ドキュメント・コード全てにユビキタス言語は現れる

モデル一覧みたいなのは定義したが、「ユーザ登録」みたいなユースケースも同じドキュメントで管理するのだろうか?
https://github.com/MikiWaraMiki/springboot-kotlin-job-offer-sample-ddd/blob/main/docs/ubiquitous_language/domainModel.md

ところがどっこいところがどっこい

ドメインモデル図

  • 簡易化したクラス図のようなもの
    • オブジェクトの代表的な属性を描くがメソッドまで書かない
    • ルール・制約を吹き出しに書き出す
    • オブジェクト同士の関連を示す
    • 多重度
    • 集約の範囲を定義する
  • 複数人で議論しながら、意見をモデルに反映させていく

https://little-hands.booth.pm/items/1835632

今回は勉強用なので、特に議論とかはできないが、wipで作成

https://github.com/MikiWaraMiki/springboot-kotlin-job-offer-sample-ddd/blob/main/docs/domainModel/domainModel.svg

ところがどっこいところがどっこい
  • モノレポを想定して、ルートのパッケージをきることにした
    • 重複が発生してしまうが、後からリポジトリを分離できるようにするので、許容する
  • config配下だけ、共通利用になる
    • beanなどを配置

調べる必要あり

  • mybatis Generatorで生成するファイル群を、複数パッケージに配置する方法はあるのだろうか・・
    • infraを共通利用にした方がいいかと思ったが、1クラスが肥大化しそう・・・
src/main/kotlin/com/tokorogadokkoi/kotlin/joboffer/
├── JobOfferApplication.kt
├── auth
│   ├── application
│   ├── domain
│   ├── infra
│   └── presentation
├── config
│   └── mybatis
└── infra
ところがどっこいところがどっこい

Mybatisの主要コンポーネント

  • org.apache.ibatis.session.SqlSession
    • SQLの発行やトランザクション制御のAPIを提供するコンポーネント
  • org.apache.ibatis.session.SqlSessionFactory
    • SqlSessionを生成するためのコンポーネント
  • org.apache.ibatis.session.SqlSessionFactoryBuilder
    • Mybatisの設定ファイルを読み込み、SqlSessionFactoryを生成するためのコンポーネント

Mybatis-Springの主要コンポーネント

  • org.mybatis.spring.SqlSessionFactoryBean
    • SqlSessionFactoryを構築し、DIコンテナ上にオブジェクトを登録するコンポーネント
  • org.mybatis.spring.SqlSessionTemplate
    • Springのトランザクション管理下で、MyBatisのSqlSessionを扱うためのコンポーネント
    • SqlSessionとしての振る舞いも提供する
  • org.mybatis.spring.mapper.MapperFactoryBean
    • MapperオブジェクトをBeanとして生成するためのコンポーネント

https://www.amazon.co.jp/Spring徹底入門-Spring-FrameworkによるJavaアプリケーション開発-株式会社NTTデータ/dp/4798142476