私は今、私が本当に興奮していないいくつかのコードをアプリケーションに持っています。私は(将来的に来てより多く持つ)これらのオブジェクトの1つを作成する必要がある自分のアプリケーション内のメソッドを持っているいくつかの基準に基づいて異なるタイプを作成する
class Base
{
// base properties ...
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
文字列プロパティに基づいて、データベースに格納されています。私はそうのようないくつかのクラスを作成しました。これらのオブジェクトのそれぞれがわずかに異なる場所からデータを取得しますが、私は今それをやっている方法があるかの大きなブロックであり、それは非常に保守思えません:
class BaseCreator
{
Base Create(string name)
{
if (name == "DerivedA")
return CreateDerivedA();
else if(name == "DerivedB")
return CreateDerivedB();
}
}
私いくつかの方法は何ですかこのコードをよりメンテナンス可能にするためにリファクタリングし、将来的に新しいタイプを追加することを容易にすることができますか?私はそれが何か違いがあれば私のアプリケーションで依存性注入(Ninject)を使用しています。
私は12種類以上の種類が追加されていることはありませんが、あなたが意味するものの例を挙げることができます。 DIコンテナを使用するために変換したものと、文字列に基づいてオブジェクトを構築することとの間に明白なリンクはありません。 –
変換は、クラスからインタフェースへのベースでなければなりません。各タイプのBaseはインターフェースを実装することができ、これによりインターフェースの要件によってそれらの実装と契約(あなたの場合はBase)を管理することができます。文字列、列挙型または何かエラーを起こしにくいものにする。 DIコンテナにタイプ(新しいenumに基づいて)を基本契約にバインドさせ、DIコンテナで目的を返すインターフェイスを解決させます。 – OnResolve
文字列はデータベースに格納されます。 –