どもー!!いっとくです!!
何がきっかけだったのか忘れたんですが、最近ドメイン駆動設計というものにハマっており、必死で勉強しております。
でもね、全然理解できない。
どれくらい理解できないかと言うと、エリック・エヴァンスのドメイン駆動設計を買って読んでも理解できないだろうな〜って思っているので買っても読んでもいないってくらいに理解できていない。
これだと勉強していないような感じするけど、ネットで色々な記事を漁っている感じです。
なんだろうね、エンジニア向けの本って初心者か上級者向けの本で溢れている気がしませんか??
何を知るにしても今ちょうどいいレベルの本が見つからないので、背伸びして買ったものの、難しすぎて半分も理解できずに撃沈みたいなことがすごく多い気がする。
探し方下手なんですかねぇ…?
しかし嘆いていても何も始まらないので、まずは上級の本でも読んで理解できるレベルにならないとって思っていたところ、こんな本を見つけたので即買いしました。
DMMインターネットの成瀬さんの本です。
以前YouTubeでクリーンアーキテクチャについての解説動画やLaravelのコードリーディングみたいなやつを拝見していたので、本も買ってみました。
で、全部読んでみたのですが、個人的にはかなり身になる内容だった!
特に僕みたいに興味は持ちつつも全然理解するのに必要な前提知識を持っていない層の人間からすると、そういう前提知識の部分をイチから丁寧に事例付きで説明してくれているので、読み進めていくうちにどんどん知識がついていくような気がしました!
ドメイン駆動設計入門でわかるようになること
ちょっと僕自身ドメイン駆動設計の全貌が全く見えていないので、この本がドメイン駆動設計を50%カバーしているのか10%カバーしているのか全くわからないのですが、注釈によると極端に理解する難易度が高い部分を除いて、まずは理解しやすいところをピックアップして解説しているとのこと。
なので、きっとこれを読んだだけだとドメイン駆動設計という奥深い思想の入り口に立ったくらいなんだと思っています。
目次にもありますが、本書を読むと
- 値オブジェクト
- エンティティ
- ドメインサービス
- アプリケーションサービス
- ユビキタス言語
などDDD関連の記事を読むと山のように出てくる意味不明な単語一つ一つの定義がわかるようになります。
さらにリポジトリやコマンドオブジェクト、ファクトリや仕様といったデザインパターン的なコードを組み合わせることで、より運用しやすく読みやすいコードを書くためにはどうすればよいのかというところを、良い例・悪い例どちらも混ぜて解説してあります。
直近のプロジェクトではリポジトリを使っていたのですが、その時書いたコードと本書の内容を照らし合わせることで、心の中で大反省が繰り広げられたのは言うまでもありません…
そういう意味でも、かなり自分の各コードにいい影響を与えてくれそうです。
反省するということは改善点が見えたということなので。
なんか今まで処理をどのクラスに書こうか悩むことが結構あったのですが、どこに書くとどんなメリットがあるか等がわかってくるようになりました。
つまるところ、本書を読むことによって、それぞれのクラスがどんな債務を持っているかがわかるようになったので、どこに書くべきかがぼんやりわかるようになりました。
特にコントローラに書くべきかサービスに書くべきかリポジトリに書くべきかみたいなところがめちゃくちゃ迷っていたのですが、その答えが見えたような気がする。
あと値オブジェクトとかの考え方が僕には斬新すぎて衝撃を受けました。笑
ちょっとプライベートで作っているサイトを実験台にしてやってみようかしら。
しかし、実際の実務となると恐らく何かしらのフレームワークを使っていることも多いと思います。
それにうまくDDDの思想を組み込むとなると、やはり今の理解度では難しいように感じるので、やはりもっとちゃんと理解をするためにはそろそろエリック・エヴァンス本人のドメイン駆動設計を読むしかないのでしょう…
重いけど頑張ろう、、、
ドメイン駆動設計入門のいいところ
結論この本は読んですごくためになったし、今後の自分のコードに影響を与えそうな内容でした。
ということでいろんな人におすすめしたいので、読んでみてここが良かったな〜という部分を4つにまとめてみました。
心理学的にはこういうのは3つにまとめた方が良いらしいですが、4つあったので4つ紹介。
一つ一つの用語の定義と債務がわかりやすい
ドメイン駆動設計の理解が難しい理由の一つに、一つ一つの用語が意味不明というのがあると思います。
ドメインとか、エンティティ解かユビキタス言語とかリポジトリとか…
いやいや、そんなのスクールで1ミリもやらなかったよ!?
なので新しい知らない難しそうな単語が出てくる度にどんどん心が削られていクのですが、これを本書を読むと、その単語たちがどんどんわかるようになっていく。
業務に活かせるレベルになれたかどうかはわかりませんが、少なくとも人に言われたら何なのかわかるし、コードの中で出てきたらその裏側の意図が読み取れるようにはなったような気がします。
文脈の中でパターンを学ぶことができる
これもすごく良かったです。
今までデザインパターンという言葉は何回も聴いてきたし、何回も調べたのですが、全然理解できていませんでした。
それもそのはずですが、結局文脈の中でそのパターンに触れないと、何がメリットで何を改善できるのかがわからないのでただの暗記になってしまうんですよね。
それが文脈の中で、こうしたいからリポジトリを使うとコードに柔軟性が出るとか、ファクトリを使うとインスタンス化のときの手順がシンプルになるみたいなパターンがよく分かるようになります。
パターンについてはそこまでたくさん紹介されているわけではありませんが、それでも収穫は大きかったように思えます。
あえて使わない可能性についても触れてくれる
プログラムの難しいところって、やっぱり正解がないところだと思うんです。多くの場合で銀の弾丸と呼べるべきものがありません。
例えばAとBの2つの方法があって、あるケースではAの方が適しているけど、あるケースではBの方が適しているみたいな状況が頻繁にある。
それは例えばトラフィック量でも変わるし、コードの保守性を取るか、プログラムの処理速度を取るかによっても変わってきます。
だからこそ面白いというのもあるのですが、かなりの混乱ポイントでもあるし、コードに関する宗教戦争の原因にもなっているんじゃないかと思っています。
そんな中でも本書では、パターンを使うべきタイミングだけではなく、使うことによるデメリットや避けたほうがいい場合についても言及されているので、頭でっかちになりにくいというのは中々良いポイントかな〜と思います。
自分のコードでこうすべき理由と、すべきではない理由を比較するきっかけを与えてくれますね!
学んだ後、MVCへの組み込み方など、実践的な手引がある
解説書を読んで、「なるほど!やり方わかった!」となったと思いきや、実際にコードに反映させようとした瞬間、やっぱりわからん!ってなること結構あると思うんです。
しかし、本書では用語やパターンの解説が終わったあと、それを実践するための手引もカバーしているという親切さ。感服いたします!
例となっている言語がC#なので、ちょっと自分のフィールドに持ってくるまでにはもう少し色々考える必要がありそうですが、それでも実践でどうするかのイメージを沸かせてくれるというのは本当に良いことです。
その辺を読者の良心に任せるとだいたいやらないですからね、多分。
そんなわけでだいぶ学びの大きな一冊になりました!ごちそうさまです!
さて、しかしこの本はあくまでドメイン設計駆動を理解するために必要な武器を用意することが目的の本です。
本書でもありますが、本丸はやはりエリック・エヴァンスのドメイン駆動設計なので、そろそろそちらも手を出さないといけないですな。
以上、いっとくでした!
さようなら〜。
コメント