C#でドメイン駆動開発とテスト駆動開発で保守性の高いプログラムを書く!1

当サイトではアフィリエイト広告を利用しています。

C#でドメイン駆動開発

ドメイン駆動開発とテスト駆動開発

ドメイン駆動開発

ドメイン駆動設計とは開発手法の一つで,一言でいうと「オブジェクト指向プログラミングを最適化したもの」というイメージになる。

オブジェクト指向設計にはいくつかの原則と,有名なデザインパターンがいくつもあるが,オブジェクト指向設計という言葉が持つ意味は非常にあいまいさがあり,技術者それぞれで定義の異なるものである。

また,オブジェクト指向設計の原則やデザインパターンは,多くの指針や実装例が示されてはいるものの,ピンポイント的な実装例が多く,アプリケーション全体を示すものは少ない。保守性やテスト容易性を高めるために,アプリケーション全体をどのように作成し,どういったクラスをどこに配置するべきか?といったところまでは言及されていない。

そういったことはおそらく開発チームごとに話し合い,決定していくべき事なのかもしれない。ドメイン駆動開発とは,GOFのデザインパターンやマーチンファウラーのリファクタリング等,オブジェクト指向に関する書籍が成熟し,そのあと,集大成のような位置づけで発表されている。システム開発で解決すべきパターンを切り分け,不具合の発生しにくい設計手法を示している。

今回はそのドメイン駆動開発の設計パターンを元に,C#でテスト駆動開発を用いて実装する方法をポイントを絞って解説していく。

テスト駆動開発

テスト駆動開発とはプログラムコードをテストコードで検証しながら作成していく開発手法である。従来のプログラムコードをすべて書いてからテストを行うスタイルではなく,実現したい内容をまず数行のテストコードで表し,そのテストコードを成功されるために本番コードを実装するというやり方である。こうすることですべての本番コードはテストしやすいコードで書かれ,バグの混入にもすぐに気づくことができる。

テストしやすいコードというのはテスト容易性と表現され,今日のプログラミングでは非常に大事な要素である。また,プログラムは良いコードと悪いコードに分けることができるが,その指標の一つがテスト容易性といえる。またそれ以外にも保守性があげられる。プログラムコードの一部を変更した場合,どこにどのような影響があるかがすぐにわかる,不具合発生時に調査すべき個所がすぐにわかる,機能追加が容易にできる等が指標となる。

ドメイン駆動開発により,どこにどのようなクラスがあるかがすぐにわかるようになり,保守性が向上します。また,テスト駆動開発により,テスト容易性が上がります。今回はこのような開発手法をC#を使って順番に解説していきます。