現在,IsFakeの値がShareに固定値で設定されています。
namespace NDDD.Domain { public static class Shared { public static bool IsFake { get; } = true; } }
これでは,コンパイルしないとFakeかどうかを切り替えることができません。それでは,実行ファイルからのテスト時に,面倒なので,外部から値を変更できるようにしておくのがいいでしょう。今回はやり方を解説していきます。
アプリケーション構成ファイルを追加する
コンパイルなしで設定を変更できるようにするために,設定ファイルを作成します。設定ファイルはどこからでも見られるようにしておきたいのでDomain層に配置します。
ドメインプロジェクトを右クリックして,「追加」「新しい項目」の順に選択します。
「アプリケーション構成ファイル」を選択し,名前を「NDDD.config」として,追加ボタンを押下します。NDDD.configという名前でなくてもいいのですが,基本的にはアプリケーション名にしておくのがわかりやすいと思います。
これで,「NDDD.config」という名前のファイルが追加されました。
作成されたファイルの<configuration></configuration>の部分は不要なので,その2行を削除します。
代わりに,<appSettings></appSettings>と打ち込みます。
IsFakeの項目を追加する
appSettingsの中に,IsFakeの項目を追加します。
これで,IsFakeという項目で,値が”0”の設定値が完成しました。こういった設定は好きなだけ追加することができます。これでファイルの作成は完了です。この状態でctrl+Sでファイルを保存しておきます。
「常にコピーする」に設定する
NDDD.configファイルを選択して,プロパティを表示し,「出力ディレクトリ」を「常にコピーする」に変更します。これで実行環境にこのファイルがコピーされて出力されることになります。コンパイル後は,このコピーされたファイルの値を変更することで,コンパイル後でも設定値を変更することができます。
WinFormのApp.configを変更する
WinFormプロジェクトに「App.config」というファイルがあるので,ダブルクリックで内容を表示します。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <appSettings configSource="NDDD.config"> </appSettings> </configuration>
appSettingsの部分を追加します。これで,アプリケーションの設定はNDDD.configファイルで行えるようになります。
Sharedで設定ファイルの値を読み込む
SharedクラスのIsFakeに固定値を設定していますが,これを,今作成した設定ファイルNDDD.configから読み込むように変更します。次のようにコードを変更します。
using System.Configuration; namespace NDDD.Domain { public static class Shared { public static bool IsFake { get; } = ConfigurationManager.AppSettings["IsFake"] == "1"; } }
設定ファイルのIsFakeの値が”1”の時のみ,SharedのIsFakeをTrueとしています。 このままだと,次のように,ConfigurationManagerがコンパイルエラーになっているので,参照設定にSystem.Configurationを追加します。
ドメインプロジェクトを右クリックして,参照の追加を選択します。
アセンブリを選択し,右上の検索窓に「conf」と入力します。そうすると,System.Configurationというのが出てくるので,そこにチェックをいれて「OK」ボタンを押下します。
あとは,上部にusing System.Configuration;を追加すると,コンパイルエラーは解消します。これで,Sharedで設定ファイルのIsFakeの値が読めるようになりました。
ブレークポイントを置いて検証する
FactoriesのIsFakeを使用している部分にブレークポイントを置いて画面を実行すれば,IsFakeに設定ファイルの値が取得できることが確認できます。うまく設定ファイルの値が取得できていない場合は,ソリューションから「ソリューションのクリーン」を行ってから実行してみてください。
ブレークポイントの部分でIsFakeの部分にカーソルを当てると,設定ファイルの値になっていることが確認できます。
実行ファイルから検証する
VisualStudioの「Factories」クラスなどをコード表示した状態で,画面上部のタブの部分を右クリックして,「このアイテムのフォルダーを開く」を選択します。
そうすると,ソースコードの存在するフォルダーが表示されます。この階層から移動して,WinFormプロジェクトがあるフォルダーを開いてください。
NDDD.WinFormをダブルクリックして中を表示します。
続いて「bin」フォルダーを開きます。
Debugモードで実行していれば,Debugを開きます。Releaseモードの時はReleaseを開きます。
その中に,「NDDD.config」ファイルが生成されているのでそのファイルを開きます。
するとVisualStudioで編集していたのと同じファイルが作成されているため,この中のIsFakeを変更することで,コンパイル後でも,値を変更することができます。
ちなみに,フォルダーから実行する場合は「NDDD.WinForm.exe」を実行すると,アプリケーションが起動します。設定ファイルを変更して,アプリケーションを起動したときの動きの違いが確認してみてください。こんな感じで,コンパイル後も値を変える可能性のある項目は,設定ファイルに項目をどんどん追加していってみてください。
#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_さいごに