ヌッ

適当

「現場で役立つシステム設計の原則」を読んでます(8-10章)

8章 アプリケーション間の連携

アプリ間の連携の方法について、特にREST APIの話が中心に解説している。
URIはリソースと一致させる、ステータスコードやHTTPメソッドが正しく対応しているかなど、
規約に沿うことで分かりやすく利用しやすいAPIとなる。

Web API: The Good Parts

Web API: The Good Parts

またJSONよりもXMLのほうがメタデータを使えるし複雑なデータを再現するならXMLのほうが良いと主張している。
これに関してはあんまり賛同していなくて、そんなメタデータ渡す必要あるのだろうか、
JSONで簡潔に済ませたほうがいいんじゃないかと思った。
これこそアプリによる課題かもしれないが。

またメッセンジャーを利用することで、疎結合な非同期通信を行えるので良しとしている。
具体的なサービス名について明記してなかったが、GCPのPub/Subがこれに相当すると思う。
たしかにアプリ間で直接やりとりするのではなく、Pub/Sub経由を前提とすることで、
疎結合になりアプリ単体のテストがしやすくなる。

複数の小さなサービス間の連携を行う設計、マイクロサービスについても触れている。
このようにサービスを分割して検証しやすくするのはオブジェクト指向の考え方にも沿っている。
ただマイクロサービスだと一部分割したサービスを統合したり移譲したりするのが難しい。
そのため深いドメイン知識が必要とされる。
以下の書籍でも初めは単一のアプリ(=モノリス)から実装し、ドメインについて詳しくなってから徐々に分解していくことを是としている。

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

9章 オブジェクト指向開発プロセス

今までメジャーだったウォーターフォールは、設計、実装、テストを別々の人で分業して行っていた。
一方最近流行りのアジャイルは、このサイクルを1,2週間のスプリントとすることでより速いサービスの改善を試みているが、
実装に寄りがちで設計、テストがないがしろになりがちである。
結局、ドメインに詳しい人間が設計、実装、テストのすべてを担当することでブレ無いドメインモデルが出来る。
また無駄にドキュメントを作ることはせず、コードこそが全ての仕様書となるようにする。

この辺の主張はまぁ分かるのだが超優秀な人間を前提としているような気がした。
実際自分もこれに似たようなことはしているのだが、コードから全てを把握するのはまだまだ出来ないし、
設計も実装もテストもまだまだスキル不足を感じる。
分かりやすいようにドキュメントがほしいと感じるのだが、書いてもすぐに陳腐化するし、そもそも誰も読んでくれないし、
結局頑張ってコード読むしか道は無いような気はしている。
コードを理解するスピードがあれば済むということであればOSSのコードを読み漁るとかすべきなのだろうか。

10章 オブジェクト指向設計の学び方と教え方

「どうすればオブジェクト指向設計を理解出来るのか?」「体で覚えよ!」
以上、という感じの章である。
こう書くと脳筋感があるが、いくつかのルールに乗っとってコードを書くトレーニングをすることで身につく、という話である。
たしかに動物をクラスとして鳴き声がメソッドで〜みたいな例を出されても結局何が嬉しいのか謎である。
ならば実際に実装してみてオブジェクト指向の良さを体験すれば良い。
紹介されているルールは基本的にlintでチェックされるようなものも多いが、例えば「全てのプリミティブ型、文字列型をラップする」というものがある。
手続き型の書き方だと難しいルールだが、このようにオブジェクトを多用することで結果としてオブジェクト指向の書き方になるという寸法である。
またいくつかオススメの書籍についても解説しているが、一番は「エリック・エヴァンスのドメイン駆動設計」のようだ。

ふりかえり

そうだよなー確かになー本当かなーとか色々思うところはあったが、全体的に平易で読みやすい書籍だった。
勝手に初級者向けのDDD本と思って読んでたが(まぁ実際そうだったが)
値オブジェクトとリポジトリ以外のパターンについてはほとんど記述がなかったように思う。
エンティティとか(極力使うなという話?)ファクトリとか(チラッと出てたけど)
そういうパターンとか考えないでひとまずオブジェクト指向に慣れろという話かもしれない。
とはいえ層とかパターンみたいなものをちゃんと理解しない開発についてけない感はあるので、
そろそろ原本を読んで勉強しようかなというところ。
あとは書籍じゃなくて開発するとかコードリーディングするとか実践経験を積むしかなさそうな感じはする。
以上です。


前々回
woody-kawagoe.hatenadiary.jp


前回
woody-kawagoe.hatenadiary.jp