読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

DCIアーキテクチャについて勉強してきた #あーだCoder

第二回あーだCoderをやってきました。 - #あーだCoder 第二回 - connpass

解説すると、あーだCoderというのは僕と@irofさんの間で勝手に盛り上がっていつの間にかconnpassたったのでとりあえずやってみるかと始まったコード中心にモデル実装なんかを語る場。

今回は割りとじっくりとコードを見て、それから解説をしてもらいました。 特に興味深かったのが@ktz_aliasさんのコード。 - Codersation/TDDBC_VendorMachine/ktz_alias at master · posaunehm/Codersation · GitHub

Data Context Interaction : DCIアーキテクチャ、というのがあるらしくて(本気で初耳)、それについてつらつらと議論して(というか教授してもらって)いました。

とりあえず、札幌Ruby会議で角谷さんが大きく取り上げたおかげで結構知られるようになったらしい。

**現状での僕の理解を晒しておく。 結局、DDDのService層をさらに発展させた考え方な気がする。角谷さんのスライドにある、「Too FatなModel」を避けるためのアプローチとしてModelの処理の適切な部分をService層として切り出すという考え方がDDDにはあるけれど、それはそれ単体だと結局FatなServiceを生むだけ。

そこに文脈(Context)という考え方を入れて、Contextに合わせたRoleとしてServiceを捉えるというのがDCIなのかなーと。@ktz_aliasさんのアプローチだと、テストとかを見た感じDDDのServiceの用な感じでロールを捉えているように見える。

ただこれはC#という言語の限界であって、例えばMixinし放題なRuby/Pythonや、Monadがある関数型言語たちでは違うアプローチが取れる、のかな・・・?ここらへんは勉強不足過ぎてなんとも言えない。

だから、オブジェクト指向的な考えに基づけば、結局DDDの分析の中でServiceを捉えるときに、ちゃんと分析できていれば自然にDCI的なアプローチになっていくのかなー、と思っていたり。

**とりあえず ほぼ空っぽの僕のレポジトリを埋める作業をします(´・ω・`)