3

標準の 3 層アプリケーション (Winforms Ui、BLL、DAL) では、各層に固有の設定が必要です。

Winforms アプリケーション設定を使用してそれらをすべて含める必要がありますか、それとも各 dll (BLL、DAL) に設定を含める必要がありますか?

データベースやカスタム xml ではなく、単純なソリューションが必要です。また、同じアーキテクチャに複数の UI を提供する必要があります。

更新:現在、レイヤーごとに個別の .config ファイルに傾いています。これが、将来のほとんどの変更 (レイヤーおよび/または複数の UI アプリの変更) を許可するベスト プラクティスであるかどうかはわかりません。

結果:設定が必要なすべてのプロジェクトに、静的なシングルトン クラスが必要になると思います。毎回、最適な方法で上位レイヤーにデータを入力します。

4

3 に答える 3

2
  1. カスタムxmlファイルは柔軟なアプローチですが、少し手間がかかります。

  2. 別のライブラリプロジェクトを設定にのみ使用します。デフォルトの設定クラスを使用して設定を保存/ロードできるため、簡単な方法ですが、ネストされた設定にはあまり柔軟性がありません。

  3. DALはルートに存在し、他のすべてのプロジェクト(UI、BAL)が参照するため、すべての設定をDALに設定します)

于 2012-12-13T07:31:48.913 に答える
1

組み込みのapp.configファイルを使用しようとするたびに、組み込みのソリューションの欠点のために、独自の構成ソリューションを実装することになりました。カスタムxmlベースのソリューションの実装は複雑ではありません。実はとても簡単です。

この基本クラスをソリューションに入れるだけです。

[Serializable]
public abstract class ConfigBase<DerivedT> where DerivedT : ConfigBase<DerivedT>
{
    protected string FilePath;
    public string FileVersion;

    public ConfigBase() { }

    public void Save()
    {
        XmlSerializer xs = new XmlSerializer(GetType());
        using (StreamWriter writer = File.CreateText(FilePath))
        {
            xs.Serialize(writer, this);
        }
    }

    public static DerivedT Load(string filename)
    {
        XmlSerializer xs = new XmlSerializer(typeof(DerivedT));
        using (StreamReader reader = File.OpenText(filename))
        {
            DerivedT config = (DerivedT)xs.Deserialize(reader);
            config.FilePath = filename;
            return config;
        }
    }
}

次に、次のように構成ファイルを作成できます。

public class Config : ConfigBase<Config>
{
    // put your variables here like below
    public string DatabaseConnectionString;
    public int numberOfConnections;
}

次のように使用します。

// Load it like this
Config config = Config.Load(ConfigFileName);
// Save it like this
config.Save();

構成ファイル内で、プロパティ、配列、およびその他の複雑な構造を自由に使用してください。すべて自動的にシリアル化されます。特定のフィールド/プロパティをシリアル化したくない場合は、XmlIgnore属性を使用します。このソリューションを使用すると、さまざまな構成ファイルを作成できますが、それらをロードおよび保存するための単一のメカニズムがあります。

Configファイル内にpublicstaticConfig GenerateDefault(string ConfigFileName)ファクトリメソッドを含めることがよくあります。これにより、デフォルト値を使用してサンプル構成が生成されます。

ファイルファイルが存在するかどうかを確認し、try/catchブロック内にロードすることを忘れないでください。

さらに優れたソリューションは、DataContractsを使用することです。これにより、プライベートメンバーをシリアル化し、さまざまなバージョンのDataContractsをサポートするための優れたメカニズムが提供されますが、少し複雑です。

于 2012-12-13T09:53:08.813 に答える
1

すべてのレイヤーが (たとえば、WCF サービスで BLL/DAL をホストするのではなく) 同じ AppDomain で実行されている場合、KISS ソリューションは、クライアントの app.config ファイルにすべての構成情報を含めることです。

命名規則を使用して、各レイヤーに属する設定を区別できます。

アップデート

コメントから:

現在はありますが、後で DAL プレゼンテーションを (たとえば WCF を介して) 自由に変更できるようにしたいと考えています。

それは簡単です。論理層を WCF などの別の物理層に移動する場合、その構成をホストの構成ファイル (ホストが IIS の場合は web.config など) に移動します。

于 2012-12-13T09:05:49.530 に答える