カテゴリー別アーカイブ: 未分類

書評 | Adaptive Code (C#実践開発手法 第2版) by @masaru_b_cl

監訳者の長沢智治氏(@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>の間違いだと思います。

広告

master以外でgit svn dcommitできなくする

!!! CAUTION !!!

このエントリはGit Advent Calendar 2014 – Qiitaではありません。

 

背景

訳あってセントラルリポジトリがSubversionだった場合、”当然”git-svnを使って開発を進めていきます。

そんなとき、たまに間違ってフィーチャーブランチ上でgit svn dcommitしてしまうことがあります。これをやってしまうとmasterをSVNと同期させるのが少し手間だったりします。

そこで、master以外ではgit svn dcommitできなくしてしまおうというのが、このエントリの趣旨です。

 

前準備

gitには当然コマンドをフックする仕組みがあります。しかし、標準のフック機構はgit-svnでは使えません。

そこで、まずは以下の「git-svn-hooks」を導入します。

rkitover/git-svn-hooks

導入手順がREADME.mdに書いてありますので、参考にして導入します。

なお、私の場合、次のような手順で入れました。

  1. ダウンロードしたgit-svn.shを~/binにコピー
  2. ~/.bashrcに次の記述を追加
    source ~/bin/git-svn.sh

 

フックスクリプトの作成

あとはgit svn dcommitをフックして、master以外のブランチでは警告メッセージを出すようにします。例えば、こんな感じの.git/hooks/pre-svn-dcommitファイルを作成します。

 

動作確認

任意のgit svn cloneしたリポジトリで、フィーチャーブランチを作ってgit svn dcommitすると、次のようにエラーになります。

$ git checkout -b some-feature
$ git svn dcommit
WARNING: curret branch is NOT "master"

これで安心してgit svn dcommitできますね!

実例で学ぶASP.NET 4.5 Webフォーム 新機能活用法:第3回と第4回が公開されています

ASP.NET 4.5の「モデルバインド」を活用する
ASP.NET 4.5の「モデル検証」を活用する

ご無沙汰していましたが、CodeZineで公開中です。

バックナンバーはこちら↓

実例で学ぶASP.NET 4.5 Webフォーム 新機能活用法:CodeZine(コードジン)