我正在尝试使我正在设计的应用程序更通用,并在其中实现命令模式以使用管理器类来调用接口公开的方法。
我有几个类,其中有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
}
}
我试图弄清楚我是否可以为这两种方法使用通用接口,以及一个可以有效地作为控制器的管理器类。这样做会增加我的经理类的重用能力。
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
}
}
但以上是一个好主意,还是我试图在不属于它的地方适应模式?
编辑:我添加了一些更多的重载方法来说明我的类很复杂并且包含许多方法,有些方法根据不同的输入参数重载了很多次。