NDDD

ドメイン駆動開発_フォルダー構成編_#27_外部の設定ファイルの値で判断する

現在,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」を実行すると,アプリケーションが起動します。設定ファイルを変更して,アプリケーションを起動したときの動きの違いが確認してみてください。こんな感じで,コンパイル後も値を変える可能性のある項目は,設定ファイルに項目をどんどん追加していってみてください。

NDDD

#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_さいごに