C#を勉強する順番

ドメイン駆動開発がオブジェクト指向をうまくコーディネートしていて最強みたい#2-2

オブジェクト指向がよりよりプログラミングをするためには必須の知識であることは,たびたび解説しているとおりですが,オブジェクト指向を学ぶということはデザインパターンを学ぶということと気がつき,いろいろなデザインパターン本を読んでいましたが,そんなときドメイン駆動開発という記事を発見しました。

ドメイン駆動開発

ドメイン駆動開発はオブジェクト指向設計全体を最適化してコーディネートするような考え方で,大変有益な情報であるように思いました。

ファーストクラスコレクション

私の見た記事では,ファーストクラスコレクションが紹介されており,プログラムの中にあるリストをひとつのクラスに抜き出し,リストを操作するためだけのクラスを作るという考え方でした。

要するにprivateでListを宣言することでListをカプセル化し,リストにまつわるエトセトラはすべてこのリストを持つクラスで操作するという考え方でした。

カプセル化という概念をとても洗練した形で具現化しているデザインパターンだと感じました。

さらにその記事の中では,受注明細の合計値を誰が計算する?というような問題提起をしており,結果的に受注クラスの中に受注明細をリストにしたprivate変数を持つのではなく,受注明細というファーストクラスコレクションを作成し,合計値などはその受注明細であるファーストクラスコレクションに処理をさせるという考え方でした。

この考え方には衝撃を受けました。

後は,顧客クラスのようなものに,名称などの項目がある場合に,顧客の上限文字数は誰がチェックする?というような問題提起をされていました。通常は顧客クラスでのチェックを行いがちですが,バリューオブジェクトという考え方を取り入れ,顧客クラスの顧客名称は顧客名称クラスにさせるという,クラスを最小単位で作成する考え方に感銘を受けました。

2人の巨匠の話

その中で2人の巨匠の本を紹介されていたのでスグに私は買いました。
ケントベックの実装パターンという本と,マーチンファウラーのリファクタリングという本でした。実装パターンは廃刊になっていましたが古本で買いました。リファクタリングも当時は廃刊になっていたので1万円というめちゃくちゃ高値でしたが買いました。その後,改版本が5000円くらいで出たのでもったいない気持ちもありましたが,情報を少しでも速く取り入れられたことには,5000円以上の価値はあったと思い,気を取り直しました。

実際にそれは本当にそう思います。どんなに低価格でも,年齢を重ねてから知識を得るよりは,少々高額でも若いうちに知識を得ていたほうが,パワーアップした自分でその後の人生を歩むことができるので,本を読むのは速いに越したことがありません。

ケントベックの実装パターンでは「完全コンストラクタパターン」に感銘を受けました。マーチンファウラーのリファクタリングはテストコードの必要性を教えてくれました。

悪いコードの動作を変えずに,コードだけよりよくすることを「リファクタリング」と読んでいます。リファクタリングの基本は,事前に悪いコードに対してテストコードを記載し,その後コードを書き換えます。常にテストを行い,バグの混入を防ぎながら,既存のコードを改造していくという考え方に衝撃を受けました。

テスト駆動開発との出会い

これまでテストコードを書かずにコーディングしていた自分が恥ずかしくなりました。偉人たちは10年以上前からこんなプログラミングをしていたのか!グーグルもマイクロソフトも頭のいい人が働いていて,こうやってテストコードを書いて,昔からガンガンコーディングをしていたのに,私はテストコードも書かずに,文法プログラミングをしていたかと思うの,情けなく,悲しくなり,今まで書いたコードをすべて書き直したくなりました。

一度リリースしたら,簡単にはコードを書き換えることができないのがこの業界の悲しいところですね。そしていつまでの自分のコードが残っているため,後輩にも昔のコードを見られてしまいます。恐ろしい業界です。

ということで,この段階でドメイン駆動開発に出会うことができましたが,どうやら,ドメイン駆動開発はテスト駆動開発とともに実装する必要があることの気がつきました。結局,オブジェクト指向,デザインパターン,テスト駆動開発,リファクタリング,ドメイン駆動開発の順で学ぶのがよさそうであるとこのころ感じ始めました。

この賢者2人との出会いにより,このころから爆速でドメイン駆動開発に関して学び始めました。学び方はというと,基本的には本を読むことになります。ドメイン駆動の本で言うと,日本語で読めるのは4冊くらいしか出てません。テスト駆動関連の本は結構出ていますが,テスト駆動は実際に実装していく中で体得していくものという感じですね。

C#を勉強する順番

C#プログラマーのための正しい3層構造が分かる「C#アーキテクチャー解説動画」をここで公開しています。よかったら見てみてください。

 

参考図書

C#の文法

プログラミングC#

プログラミング.NET Framework

実戦で役立つ C#プログラミングのイディオム/定石&パターン

Head First C# ―頭とからだで覚えるC#の基本

Effective C#

C#プログラマのための.NETアプリケーション最適化技法

C#コードの書き方や環境

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

Code Complete 第2版 完全なプログラミングを目指して

.NETのクラスライブラリ設計 改訂新版 開発チーム直伝の設計原則、コーディング標準、パターン

チーム開発の教科書 C#によるモダンな開発を実 践しよう!

達人プログラマー ―熟達に向けたあなたの旅

ドメイン駆動開発

エリック・エヴァンスのドメイン駆動設計

実践ドメイン駆動設計

ドメイン駆動

現場で役立つシステム設計の原則

エンタープライズアプリケーションアーキテクチャパターン

デザインパターン

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向のこころ

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

オブジェクト指向

ジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
  すばらしい本です。オブジェクト指向が詰まっています。

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座
  サンプルコードはjavaですが,最初にオブジェクト指向に目覚めるのに最適な本です。

Head Firstオブジェクト指向分析設計 ―頭とからだで覚えるオブジェクト指向の基本
  マンガみたいな感じで読めて,オブジェクト指向について学べます。  

Clean Code アジャイルソフトウェア達人の技

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Adaptive Code ~ C#実践開発手法

.NETのエンタープライズアプリケーションアーキテクチャ

実装パターン
  廃盤のため異常に高くなりすぎなので,様子を見た方がいい気がします。一万円のボリュームがあるかどうかは微妙です。

オブジェクト指向でなぜつくるのか

レガシーコード改善ガイド

リファクタリング 既存のコードを安全に改善する

C#でオブジェクト指向をする方法

オブジェクト指向の原則1:単一責務の原則