NDDD

ドメイン駆動開発_フォルダー構成編_#20_Fakeとデータベースの値を切り替える方法

以前のレクチャーでFakeについて解説しました。MeasureFakeを作りましたね。実際にはデータベースに接続して,Measureというテーブルを検索する構想ですが,データベースが存在しなくてもいろんな値でテストできるようにMeasureFakeを作成しました。Fakeはプロトタイプとしてお客さんに見せるときにも使えます。今回はそのFakeと本番コードであるSqlServerのクラスとの切り替え方法を解説していきます。

SqlServerフォルダーを作成する

まずは本番コードのSqlServerのクラスを置く場所としてSqlServerフォルダーをInfrastructureに作成します。

Infrastructureのプロジェクトを右クリックして,「追加」「新しいフォルダー」を選択して,フォルダーを作成し,名前を「SqlServer」とします。このInfrastructureのフォルダー構成はテクノロジーごとに作ります。SqlServerとOracleがあったら,それぞれでフォルダーを作ります。あとCsvとか,外部と接触するテクノロジーごとに分割します。

MeasureSqlServerクラスを作成する

作成した「SqlServer」フォルダーの中に「MeasureSqlServer」クラスを作成します。

SqlServerフォルダーで右クリックをして「追加」「クラス」の順で選択し,「MeasureSqlServer」クラスを作成してください。

MeasureSqlServerクラスを作成したら,次のように記述します。

ここまで書いたら,IMeasureRepositoryがGetLatestの未実装エラーとなり,コンパイルエラーとなります。IMeasureRepositoryにカーソルを当ててctrl+ドットキーを押下してEnterを押すと,次のコードが自動生成されます。自動生成がうまくいかない場合は手入力してください。

自動生成でGetLatestを作成するとNotImplementedExceptionの例外が通知されるようになります。これは未実装の例外です。今回,SqlServerの実装は遅らせて実装する構想なので,この未実装例外はそのまま置いておいてください。そうしておいたほうが,今後,間違えて使用したときに,すぐに未実装であることが気付けるようになります。

View側の状況

現在LatestViewの実装を見ると,MeasureFakeを生成することが固定になっています。

これではMeasureFakeにしか繋がらないので,ここをFakeかSqlServerに繋ぐのかを切り替えるようにしないといけないので,そのあたりを次回は見ていきたいと思います。

NDDD

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

#01_プロジェクトの作成
#02_プロジェクトの追加
#03_依存関係
#04_ドメイン駆動開発でApplication層は必要?
#05_Domainのフォルダー構成
#06_Infrastructureのフォルダー構成
#07_WinFormのフォルダー構成
#08_Testsのフォルダー構成
#09_テスト駆動で実装するための事前準備
#10_テストコードとViewModelの追加
#11_テストコードを追加する
#12_ Repositoriesフォルダーの作成
#13_ Entitiesフォルダーの作成
#14_ Mockの作成
#15_フォーム画面の作成
#16_画面のコントロールデータバインドする
#17_Fakeを使ってタミーデータを画面に表示させる
#18_Fakeデータを画面に通知する
#19_PropertyChangedの方法を変更する
#20_Fakeとデータベースの値を切り替える方法
#21_Sharedクラスを作成する
#22_クラスを生成するファクトリークラスを作る
#23_#if DEBUGでFakeデータがリリースされないようにする
#24_DEBUGモードであることをわかりやすくしておく
#25_Factories以外から生成できないようにしておく
#26_Factoriesの呼び出しはViewModelで行う
#27_外部の設定ファイルの値で判断する
#28_Fakeデータを切り替える方法
#29_FakePathを設定ファイルとSharedに移す
#30_Fakeデータのバリエーション
#31_Shareクラスの活用方法
#32_ベースフォームを作る
#33_SharedにログインIDを記憶する
#34_BaseFormでログインユーザーを表示する
#35_ValueObject
#36_ValueObjectを作成する
#37_抽象クラスValueObjectを使用してイコールの問題の解消
#38_AreaIdにビジネスロジックを入れる
#39_AreaIdクラスをEntityに乗せる
#40_MeasureDateの作成
#41_MeasureValueの作成
#42_オブジェクト指向の自動化
#43_Repositoryの具象クラス
#44_例外処理
#45_例外の作成
#46_インナーエクセプション
#47_例外の欠点
#48_メッセージの区分
#49_エラー処理の共通化
#50_ログの出力
#51_タイマー処理はどこに置く?
#52_タイマークラスの作成
#53_StaticValues
#54_Logics
#55_Helpers
#56_Module
#57_トランザクションはどこでかける?
#58_特徴を見極める
#59_さいごに

 

参考図書

ドメイン駆動開発

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

実践ドメイン駆動設計

ドメイン駆動

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

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

デザインパターン

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

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

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

オブジェクト指向

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

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

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

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

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

Adaptive Code ~ C#実践開発手法

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

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

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

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

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

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

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