LoginSignup
10
10

More than 5 years have passed since last update.

責務配置設計 - DDD第1歩

Posted at

※この記事は書きかけの記事です。

第1歩なのでサラッと行きます。

ツッコミ待ってます。(ただし、鉞は怖いのでやめてください)

責務配置とは

責務とは

せき‐む【責務】
責任と義務。また、果たさなければならない務め。「―を負う」
https://kotobank.jp/word/%E8%B2%AC%E5%8B%99-547440

Controllerであれば View と Model をつなぐのが責務であり、ビジネスロジックは責務の範囲外といった感じの、それぞれが担うべき役割。

なぜ責務配置が必要か

責務配置について考える必要性は、責務配置がなかったらどうなるのかという視点から見ていきます。

責務配置がぐちゃぐちゃだったら

何か処理を追加したい、変更したいと思った時にどこに処理を追加すればよいのか、変更したい処理がどこにあるのかを発見することが困難になり、生産性が落ちます。
生産性が落ちるだけならまだしも、同じ処理が各クラスに記載されて保守性が落ちる可能性を大いに孕んでいます。

また、いわゆる技術的負債をどんどん積んでいくことになるわけです。
あなたの技術的負債を返済するのは誰ですか?あなたですか?見知らぬ誰かですか?
他の人の技術的負債を返済するのは誰ですか?

責務配置を考える上での設計思想

責務配置を考える上ではきちんとした設計思想が必要となります。

DDD,DCIとかあるみたいですが、全然詳しくないのでほかにどのような思想があるのか情報提供を受けたいです。

ちなみにNTTデータさんのTERASOLUNAのアーキテクチャを見るとひとつこういった思想もあるのだというのがわかります。(But Not DDD)
http://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/

先日ソースコードのお掃除の記事を書きましたが、既存コードをDDDの設計に切り替えるのは無理だと判断しTERASOLUNAと同じ思想でリファクタリングを行いました。
http://qiita.com/FScoward/items/539e62098088e09cb757

DDD

ドメイン駆動設計

なぜDDDか

現状ではDDDを利用した設計をしたことがないのでうまいことメリットを説明できないので、動画を貼っておきます。
https://youtu.be/77BTZWq3GiQ
https://youtu.be/FNEfk-dlIKU

DDD参考資料(ネット)

http://d.hatena.ne.jp/asakichy/searchdiary?word=*[DDD]
http://d.hatena.ne.jp/j5ik2o/searchdiary?word=*[DDD]
http://d.hatena.ne.jp/higayasuo/20080519/1211183826
http://qiita.com/opengl-8080/items/4f8938c65d8a2b7e50d0
http://labs.gree.jp/blog/2013/12/9354/

DDD参考資料(本)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践ドメイン駆動設計 (Object Oriented SELECTION)

ドメインイベント

DDDにおいてはドメインが最大の関心事

サービスは消極的に作成する

基本的にはエンティティと値オブジェクトを使用するように設計します。

サービスに頼ってしまうと

サービス毎に分断されてしまうため同じ処理が各サービスに散らばる危険性がある。
またドメインモデル貧血症に陥ります。
http://bliki-ja.github.io/AnemicDomainModel/

エンティティとは何なのか

振る舞いを持つ。
Serviceをextendsすることもある。

DIをどうするか

scalaを使用すると以下のようなシンプルなDIを実現することが可能です。

シンプルなDI
http://www.michaelpollmeier.com/2014/06/29/simple-dependency-injection-scala/

ただし、このシンプルなDIがDDDで活用できるかどうかはちょっとまだわかっていません。

DDD sample code

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10