監訳者の長沢智治氏(@tnagasawa)より献本御礼。
https://shop.nikkeibp.co.jp/front/commodity/0000/P53540/
本書は以前書評を書いた「C#実践開発手法」の第2版です。
新刊『Adaptive Code 〜 C#実践開発手法 第2版』 – 長沢智治のブログ
https://nagasawa.blog/entry/adaptive-code-second-edition-japanese
本書の特徴は何といっても「C#」がタイトルからなくなったことです。初版の書評で、私は次のように書きました。
「C#ならでは」というものも、それほど多くはないという印象でした。この点については少し残念でした。
しかし、本書ではC#かどうかは重要ではなく、いかに「適応力のある(≒Adaptive)」なコードを書くかに主眼があることがより明確になりました。これは非常に素晴らしいことです。
本エントリでは、初版から変わったところを中心に、私が思ったことを紹介します。
レガシーコード改善がより実践的に
本書は初版では一緒の章になっていた「テスト」と「リファクタリング」が別々の章になりました。これにより、元の「Adaptive」でないレガシーコードの改善の手順が、より実践的になりました。
特に良いと思ったのは、最初に「仕様化テスト」を用意するところです。しかも、テスティングフレームワークを使うのではなく、ただのコンソールアプリでよいという割り切りが素晴らしいです。
テスティングフレームワークを使うと、どうしても入出力ファイルの扱いで制約を受けて、うまくテストすることができないことがあります。それを、対象コードをそのまま動かすことで、とにかく変更前後の結果が同じかどうかを比較できるようにすることが、何よりも大事だというメッセージと受け取りました。
テストが手厚い
前述のように「テスト」と「リファクタリング」が分かれたことにより、「テスト」についてより包括的に書かれています。初版ではほぼ「ユニットテスト」しか扱っていませんでしたが、より大きなテストアンチパターン、「テスト駆動開発」と「テストファースト開発」の違いなど、かなり情報が増えており、とても良いと思いました。
Code ContractとUnity(DIコンテナの方)はちょっと……
初版から「契約による設計」を強制するツールとして第9章に「Code Contracts」が出てきます。ただ、正直最新のVSに対応していませんし、製品としても今はあまりメンテナンスされていない印象ですので、ちょっとなーと思いました。
また、Unityを使ったDI(依存性の注入)についても、今は「Unity」といったらゲーム開発ツールの方を先に思い浮かべてしまいますし、.NET Coreに標準でDIの仕組みが入ったこともあり、ちょっと古い感じはあります。
初版の書評でも述べた通り、本書は初心者がSOLID原則などを学ぶのにも適しています。タイトルからC#もなくなりましたし、他の言語を扱っている人にもぜひ読んでもらいたいと思います。
それでは、最後に恐らく間違いを見つけたので、そちらも紹介しておきます。
「第9章 リスコフの置換原則」のp.299 リスト9-30は、p.297の図9-6と見比べてみると、IEntityRepository<TEntity>
の型引数にout
キーワードが足りません。おそらく正しくは、IEntityRepository<out TEntity>
の間違いだと思います。
ピンバック: 新年のごあいさつ & 2018年のふりかえり by @masaru_b_cl | be free