JavaでDDDをしてみてる

JavaでDDDをする機会に恵まれたので、その時に思ったことを書いていく。

環境

  • Java 8
  • Spring Boot
  • MyBatis

感想

DDDをやる上で業務の関心事をEntity、ValueObject、ServiceとRepositoryで表現する。
おそらく設計時間でいうとDDDを検討している時間が一番長いと思うんだけど、この時間よりも実装のMyBatisのMapping用のxmlを作成するのがぶっちぎりで時間がかかる。
さらにMapping用xmlは手作りすると間違える事が多いのだけど、この間違いの原因把握に時間がかかる。設計にかかる時間を1だとするとMapping用xmlをちゃんと作るには5倍ほどの時間がかかる。

これではDDDでdomainのモデルをxp的に成長させると考える事はできないと思う。entityにフィールドを追加した時にコンパイルエラーが出てくれる方が容易に修正できる。
つまり道具立としてMyBatisは誤りだと考える。

例えば、DbFluteの様なORMを使ってるDaoをRepositoryの中で使用してそのフィールドを移送するユーテリティーがあったほうが効率は上がる。IDEでは赤い波線が出てくれる。そうすることによってdomainモデルを成長させていく事に注力できる。実際DbFluteはDbレイアウトを親とするのでDDDには不向きだと思う。なんかあったらいいのに