C#を勉強する順番

C#を勉強する順番!第2章 オブジェクト指向との出会い#2-0

オブジェクト指向との出会いってずっと前から出会っていたけど気がつかなかった!

ずっと前から出会っていましたが,見てみぬふりをしていたのか,オブジェクト指向を正面から学んでいませんでした。しかし,リーダブルコードという本を読んでみても,何かしっくりしないものがありました。

C#を学んでいるだけでは突破できない

「C#を学んでいるだけでは突破できない何かがある…」なんとなく私の心の中は,そんな気持ちが芽生えていました。確かにリーダブルコードに書かれていることは有益な内容でした。美しいプログラミングをするための知識がありました。しかし,リーダブルコードは文法的な美しさや,コーディングルール的な美しさがメインで書かれていました。

ボタンクリックイベントの中身をどこか違うクラスに移動してみても,結局書いてある場所が違うだけで,それで何が良くなったのか分からない,というか,何も良くなっていない,もっと言うと,違う場所に書くようにしたために,返って可読性が悪くなってしまっていました。

オブジェクト指向を学ぶことが良いプログラミングであると気づく

どうすればいいのか悩んでいましたが,そんなときに以前の大手で学んだ,オブジェクト指向が頭に浮かびました。C#で美しいコードを書きたかったのだけど,C#なんて言語の概念は一度忘れて,オブジェクト指向言語として捕らえないといけなかったのだと思いました。

とりあえず,オブジェクト指向とは何かをインターネットで調べてみることにしました。以前働いていた職場では,3層構造でプログラミングをしている現場が結構ありました。働いているときは,それにどのような意味があるのかは分からず,そういう決まりなのでそれにならって書いているという感じで働いていました。

この3層構造がオブジェクト指向をつかむヒントになるのではないかと思い,いろいろとインターネットで3層構造に関して探しました。インターネット上には,あまりこの3層構造の概念は無かったように思います。少しは出てきましたが,詳しい解説はありませんでした。

ストラテジーパターンとの出会い

しかし,ひとつ有益な情報を得ました。それは,データ取得部分はDAOパターンを使うということ。DAOパターンはjavaの世界での常識のようでしたが,私にはよく分かりませんでした。私が読んだ記事では,データ取得部分にインタフェースを使用して,ストラテジーパターンにするということ。ストラテジーパターンなんてもちろん知らなかった私でしたが,インタフェースをしようして,インスタンスを差し替え可能にするという概念は,なんとなく理解でき,探していた3層構造のデータ部分に使えると感じました。さらにその記事では,ファクトリーパターンを使用して,必要なインスタンスを生成することを専門にしたクラスを実装することが書かれていました。この考え方は今でも使用している実装方法で,データなど外部との接触部分は「ストラテジーパターン」プラス「ファクトリーパターン」が有効です。

「困ったときは本を読む」ということで,本屋さんに行って,オブジェクト指向に関する本を色々と探しました。独習シリーズのオブジェクト指向という本がありました。そこには3層構造での実装が「java」と「C#」で書かれていました。先輩たちのしていた実装に結構似ていた気がしたので,みんなこれを見て実装していたのかな?と思いました。

それ以外でいうと「コードコンプリート」上下巻あわせると2万円近くしました。内容はリーダブルコードをさらに詳しくした感じに,プログラム設計の要素もある感じの本でした。

あとは,HeadFirstシリーズのオブジェクト指向本などは,漫画みたいな感じで,結構読みやすかったですね。

C#とか関係なく,オブジェクト指向言語として捉える

結局これまでは本屋に行ってもC#の本を買っていましたが,そんな小さな世界ではなく,プログラム設計のお話に目を向けなければならないということにようやく気がつきました。

そういった視線で本屋に行くと,結構設計に関する本が出ています。サンプルコードはほとんどがjavaですが,C#と非常によく似ているため,8割以上はすらすらと読めますね。

先祖であるC++やjavaの本から学ぶことはたくさんありました。

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:単一責務の原則