設計しているアプリをより汎用的にし、コマンドパターンを実装して、マネージャークラスを使用して、インターフェイスによって公開されているメソッドを呼び出そうとしています。
GetItem()
とGetList()
メソッドを含むクラスがいくつかあり、一部はオーバーロードされています。私が依存性注入を使おうとしていたので、それらは異なるパラメーターを受け入れ、異なるタイプを返します。次にいくつかの例を示します。
class DatastoreHelper
{
public Datastore GetItem(string DatastoreName)
{
// return new Datastore(); from somewhere
}
public Datastore GetItem(int DatastoreID)
{
// return new Datastore(); from somewhere
}
public List<Datastore> GetList()
{
// return List<Datastore>(); from somewhere
}
public List<Datastore> GetList(HostSystem myHostSystem)
{
// return List<Datastore>(); from somewhere
}
}
class HostSystemHelper
{
public HostSystem GetItem(int HostSystemID)
{
// return new HostSystem(); from somewhere
}
public List<HostSystem> GetList(string ClusterName)
{
//return new List<HostSystem>(); from somewhere
}
}
これらの2つのメソッドにジェネリックインターフェイスを使用できるかどうか、および実質的にコントローラーとなるマネージャークラスを使用できるかどうかを調べています。これを行うと、マネージャークラスの再利用能力が向上します。
interface IGetObjects
{
public object GetItem();
public object GetList();
}
class GetObjectsManager
{
private IGetObjects mGetObject;
public GetObjectsManager(IGetObjects GetObject)
{
this.mGetObject = GetObject;
}
public object GetItem()
{
return this.mGetObject.GetItem();
}
public object GetList()
{
return this.GetList();
}
}
パラメータをメソッド自体に渡すのをやめ、代わりにクラスプロパティを使用する必要があることはわかっていますが、依存性の注入は失われます。呼び出し元のコードで返されるオブジェクトを、本来あるべきものにキャストする必要があることはわかっています。したがって、私のヘルパークラスは次のようになります。
class DatastoreHelper
{
public string DatastoreName { get; set; }
public string DatastoreID { get; set; }
public object GetItem()
{
// return new Datastore(); from somewhere
}
public List<object> GetList()
{
// return List<Datastore>(); from somewhere
}
}
class HostSystemHelper
{
public int HostSystemID { get; set; }
public string ClusterName {get; set;}
public object GetItem()
{
// return new HostSystem(); from somewhere
}
public List<object> GetList()
{
//return new List<HostSystem>(); from somewhere
}
}
しかし、上記は良い考えですか、それとも私はそれが属していない場所にパターンを適合させようとしていますか?
編集:クラスが複雑で多くのメソッドが含まれていることを示すために、いくつかのオーバーロードされたメソッドを追加しました。いくつかは、さまざまな入力パラメーターに従って何度もオーバーロードされています。