1

さまざまな種類の構成ファイル (テキストや xml など) からのパラメーターを持つコンテナー クラスがあります。

そこで、textConfigurationFiles 用のクラスと xmlConfigurationFiles 用のクラスを作成しました (このためのインターフェイス IConfigFile を後で実装すると思います)。

コンテナ クラスの初期化は次のようになります。

ContainerClass myContainer = new ContainerClass();
myTextConfig = new TextConfig(textFile);
myContainer.ParameterA = myTextConfig.ParameterA;
myContainer.ParameterB = myTextConfig.ParameterB;
myContainer.ParameterC = myTextConfig.ParameterC;

またはxmlの場合

ContainerClass myContainer = new ContainerClass();
myXMLConfig = new XMLConfig(xmlFile);
myContainer.ParameterA = myXMLConfig.ParameterA;
myContainer.ParameterB = myXMLConfig.ParameterB;
myContainer.ParameterC = myXMLConfig.ParameterC;

しかし、すべての単一の値を割り当てる代わりに、何らかの変換を行いたいと考えています。型キャストを実装する必要があるのか​​、ContainerClass オブジェクトを返す単純なメソッドを実装する必要があるのか​​ わかりません。

myContainer = myTextConfig.ConvertToContainer();

また

myContainer = (ContainerClass)myTextConfig;

あなたの提案は何ですか?

私は単一責任の原則を実装しようとしているので、ContainerClass が単純なコンテナを表すようにしたいと考えています。だから私は次のようなものだと思います

ContainerClass myContainer = new ContainerClass(configFile);

SRPで壊れますか?

おそらく、ContainerClass はテキストファイルまたはxml ファイルによって初期化されることに言及する必要があります。パラメーターがテキストファイルxml ファイルの両方から得られるわけではありません。


[編集: 追加情報]

ContainerClass は、データベース構成情報 (パス、名前など) を持つコンテナーを表します。

textFile はデータベース構成を表します。

xmlFile にもデータベース構成が含まれていますが、textFile よりも多くの (データベース構成) パラメータがあります。

私はsthについて考えます。お気に入り:

IConfig        config    = new TextFileConfig(fileName);
ContainerClass container = config.ConverToContainer();

また

IConfig        config    = new TextFileConfig(fileName);
ContainerClass container = (ContainerClass)config;

TextFileConfig で:

public class TextFileConfig : IConfig
{
    ContainerClass container;

    //
    // Constructor
    //
    public TextFileConfig(string fileName)
    {
        //
        // Initialize all values from file fileName
        //
        ...

        //
        // Initialize container with standard values
        //
        container = new ContainerClass();

        //
        // Merge container with values from textFile
        //
        ...

        //
        // Now container contains all values from textFile,
        // all missing parameters are initialized with
        // standard values.
        //
    }


    public ContainerClass ConvertMethodOrTypecastThatsTheQuestion()
    {
        return container;
    }
}

では、convert メソッド、typecast、またはその両方を優先する必要がありますか?

最初に、パフォーマンス、最適な使用法、および個人的な習慣について考えます。

4

1 に答える 1

3

私はこれらの行に沿って何かをすると思います:

  • 構成を表す型を作成します。IConfig
  • 構成ローダーを表すタイプを作成しますIConfigLoader
  • インスタンスを返すさまざまな構成ローダーの実装 ( 、 など) を作成XmlConfigLoaderTextConfigLoaderます。IConfig
  • ローダーの実装を選択して、動的、構成、またはハード コーディングなどのいずれかで使用します。たとえば、抽象ファクトリや IoC コンテナーを使用できます。
  • IConfigロードされたインスタンスをContainerClassコンストラクターに渡し、それ自体を初期化します。

あなたの質問に関しては、構成オブジェクトをコンテナーに渡すと SRP が壊れるかどうかわかりません。少なくとも、コンテナーをインスタンス化して初期化するために、構成を取得して読み取るコンテナーのファクトリを作成できます。コンテナ作成タスクの複雑さのレベルに応じて、過剰に設計されている可能性があります。

于 2009-05-07T13:01:50.400 に答える