アジャイル
DDD
ドメイン駆動設計
モダンアジャイル

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第四章 ドメインを隔離する3

More than 1 year has passed since last update.

フレームワーク

アーキテクチャフレームワークは、プログラムにある他の部分の設計に、はるかに大きな影響を与える。(第二部 第四章より)

モデルに影響するようなアーキテクチャフレームワークの選択はとても大事ですよね。

javaなら、springやj2eeやplay、rubyならrails、phpならSymfony・・・
データベースとの接続も影響しますよね。MyBatisやJPA、Hibernate、ActiveRecord・・・

フレームワークを使うと、他のレイヤをきわめて特殊な仕方で実装しなければならなくなることも多い、これは例えば、フレームワークが定義したサブクラスとして定義したり・・・ドメインについての設計の選択肢を制限する前提を多く設けすぎたり、・・・(第二部 第四章より)

モデル層のクラスがフレームワーク用のクラスを継承しなければならないとか、テーブルと1対1のクラスでないといけないとか、モデルとその他技術を分離する必要があるのに、フレームワークがそれを妨げてしまってはいけませんね。こういう意味で、フレームワークの選択が重要になってきます。

よいフレームワークとは何か?

最もよくできたアーキエクチャフレームワークは、複雑な技術的問題を解決する一方で、ドメイン開発者が表現することに集中できるようにする。(第二部 第四章より)

モデルの構築に障害が生じるならば、たとえ使い慣れたフレームワークでも、手放したり、一部機能を使わなかったりということをする必要もでてくるでしょうね。

最近よく聞く、「モダンアジャイル」の原則に「実験・失敗を繰り返す」というのがあります。
モデルを構築しやすい環境を作るための実験もこの中に含まれるのだろうと思うのです。

フレームワークに汚染されないモデルを実装することを目標にフレームワークを選択・実験する。

追伸:おすすめはspringとMyBatisの組み合わせです。最近でこそ、pythonなど他の言語も扱うようになりましたが、spring・MyBatisほど、複雑な技術の問題を解決しつつもモデルにはほぼ影響を及ぼさないフレームワークにはまだ出会っていません。。。