LoginSignup
4
4

More than 5 years have passed since last update.

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第五章 ソフトウェアで表現されたモデル10(モジュール)

Last updated at Posted at 2017-10-06

鳥の目も虫の目も持つためのモジュール(パッケージ)

全体によって圧倒されることなく、モジュール内部の詳細を見ることができるし、その一方で、内部の詳細を無視した上で、モジュール間の関係性を見ることもできるのだ。

つまり鳥の目も虫の目も持つためのモジュール。

alt

物事の全体を見ているだけでは細部はわからず、部分に注目するだけでは全体性を見失う。(学習パターンNo.19 鳥の目と虫の目より)

モジュールはドメインを学習するために必要不可欠なものだと思います。

モデルとしてのモジュール

ドメイン層のモジュールは、モデルにおいて意味のある一部として現れ、より大きな尺度でドメインのことを語らなければならない(第二部 第五章 より)

整理するためにモジュールやパッケージを活用するチームは多いとおもいますが、ドメイン駆動で設計しているチームでも、モデルとして扱っているチームは少ないかもしれません。

「ドメインのことを語らなければならない」というのはそのままの意味かと思います。

例えば、

model
|---- item
|---- member
|---- order

というフォルダ構成であれば、「"会員"が"商品"を"注文"する」と語るのであります( ・ิω・ิ)

モデルが物語だとすれば、モジュールは章に相当する。(第二部 第五章 より)

そして、これは鳥の目のためのモジュール

例えば、memberの中を見れば虫の目でモデルを確認できます。

model
|---- item
|---- member
| |____ Name.java
| |____ Contact.java
| |____ Profile.java
| |____ ***.java
|---- order

マジカルナンバー7±2

モジュールでモデルをわけることにより、モデリングや設計を小さいモジュール単位で扱うことができるようになります。
人間が一度に覚えることのできる数は7個前後と言われています。
こういうのも意識してみるといいかもしれませんね。

凝集度と結合度とパッケージ図

関連のあるモデルをモジュールに集め、関連の薄いモデルを疎結合に保つために別のモジュールに移動していきます。
凝集度と結合度は、オブジェクト指向の基本のパターンですね。
それをモジュールにも適用します。

パッケージ図を書くといいですね。

クラス図2.png

リファクタリング

モジュールはモデルの一部にも関わらず、初期に設計したあとはあまり変更されることがありません。
しかし、モデルは変化し、進化するもの。モジュールを修正するのは、ソースコードを修正するよりインパクトがありますが、モデルの進化に合わせて、リファクタリングしていくことが大事。

コンフリクトを起こしたりすることも多々あるかと思いますが、歯を食いしばってリファクタリングしましょう。

今のプロジェクトでも、何回かモジュールの変更を行いました。一人でリファクタリングしても影響が大きく、その間誰もソースをいじれなそうだったので、モジュールを変更する際には全員が集まって、その場で変更してしまっています。モブプログラミング的なプラクティスですね。

4
4
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
4
4