2

私には2つのクラスがあります。SpeciesReaderファイルを取得して解析します。Speciesファイルから解析された種に関する特定のデータを格納します。

現在、私はメソッドを持っています:SpeciesReader.generateSpecies()、それはオブジェクトを作成するためにインスタンス化されたファイルを使用しSpeciesます。これは悪い習慣/デザインですか?Speciesファイル名を引数として取るコンストラクターにこれを移動する方法をどうにかして見つける必要がありますか?

4

5 に答える 5

8

全くない。これは、ファクトリと呼ばれる一般的なパターンです。

そうは言っても、ファクトリは通常、個別のクラスではなく、クラス自体(この場合は種)に実装されますが、そのように分離しても問題はありません。

この責任が代わりに種にあるべきかどうかに関しては、それはファイルの性質に依存します。ファイルに含まれる種が1つだけで、そのファイルのロードに大きなオーバーヘッドがない場合は、ファイルを種の一部にするのが理にかなっている可能性があります。

ただし、ファイルに多くの種が含まれている場合、または初期化にコストがかかる場合は、その責任を別のクラスに移動し、種オブジェクトの作成を担当させることは完全に理にかなっています。

于 2009-09-29T01:45:47.893 に答える
0

ファイルの解析を、そのファイルから解析されたオブジェクトの実装から分離することをお勧めします。これは「関心の分離」として知られています。Speciesの実装は、永続ストレージでどのように表現されるか(OO設計用語では「永続に依存しない」)、またはコンストラクターに渡されるパラメーターがどこから来るかを認識または気にする必要はありません。作成された後、システム内の他のオブジェクトとどのように相互作用するかだけを気にする必要がありますが、その作成は行われます。種が永続ストレージでどのように表されるかに関する懸念は、他の場所、この場合はSpeciesReaderで実装する必要があります。

于 2009-09-29T09:34:56.543 に答える
0

使用できるパターンはいくつかあります。

実装するパターンの選択はユースケースによって異なりますが、Cletusは正しいので、ファクトリは良い選択のようです。

public class SpeciesFactory
{
    private final static SpeciesFactory INSTANCE = new SpeciesFactory();

    private SpeciesFactory() { }

    public static SpeciesFactory getFactory() 
    {
        return INSTANCE;
    }


    public Species getSpecies(String filename)
    {
        Species species = null;
        //do business logic
        return species;
    }

}

Species carnivore = SpeciesFactory.getFactory()。getSpecies( "carnivore.txt");を呼び出すことで使用します。

于 2009-09-29T02:21:01.593 に答える
0

あなたが持っているのはファクトリメソッドパターンの例です。この作成パターンは、場合によってはうまく使用できます。しかし、私の個人的な好みは、ctorのより読みやすい代替品の使用のみに制限し、その中で過度に複雑なことは何もしないことです。これは、このファクトリに依存するクラスのテストを簡素化するためです。

複雑な構造の何かには、AbstractFactoryを使用します。このようにして、ファクトリが持つ一連のファイルやその他の依存関係を作成することなく、ファクトリに依存するコンポーネントをテストできます。

上記では、工場でシングルトンメソッドと静的メソッドを使用することについて質問しています。これについての私の見解は次のとおりです。静的メソッドは読み取り可能なctorに適しています。シングルトンは、単体テストを好む人を苛立たせるのに適しています

于 2009-09-29T09:18:46.373 に答える
0

多くの場合、オブジェクトを永続化する方法から分離することをお勧めします。バイナリファイル、xmlファイル、データベースレコード、ネットワークソケットなど、種をロードする方法がたくさんあると想像してみてください。貧しい種は、プログラムのすべての部分について知りたくありません。

于 2009-10-01T00:57:48.680 に答える