我有一個接口專用類參數
interface IRepository<T>
{
List<T> GetAll(string id)
List<T> GetAll(string id, string desc)
List<T> GetAll(string id, string desc, int[] status)
List<T> GetAll(string id, string desc, int[] status, ....)
}
我的許多種類是實現了這個接口。我的問題是,更常見的情況是,當客戶請求定製時,我通常需要在方法上添加參數。所以當我有10個類實現這個接口時,我還需要更新每個繼承接口的類(我使用抽象工廠模式),這非常麻煩。而且它也不是很喜歡看到許多方法重載像上面的例子,imo。是否有任何解決方案/解決方法使參數動態(旁邊的param []選項,我不喜歡)。我的意思是像一個專用的類/接口參數,所以當我添加參數時,我不需要重載該方法。像這樣
interface IRepository<T>
{
List<T> GetAll(Parameter args);
}
的放慢參數類(或者接口)的客戶
class Client1Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
return DataFactory.GetAllById(param.Id);
}
}
class Client2Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
return DataFactory.GetAllByDesc(param.Desc);
}
}
class Client2Accounts : IRepository<Employee>
{
List<Employee> GetALl(Parameter param)
{
int[] status = { 99, 88 }
return DataFactory.GetAllFiltered(param.Id, param.Desc, status);
}
}
這樣,當我需要添加參數,我會
static class Parameter
{
public string Id { get; set; }
public string Desc { get; set; }
public int[] Status { get; set; }
}
樣本實現只需添加另一個屬性到參數類
static class Parameter
{
public string Id { get; set; }
public string Desc { get; set; }
public int[] Status { get; set; }
public long newLongParam { get; set; }
}
這種方法是否正確?任何其他想法?
也許我不需要爲此提供一個接口,但是您的建議是什麼?在這種情況下,clientA只能傳遞ID,而clientB只能傳遞Desc,但它們都希望得到相同的數據?謝謝^^ – CSharpNoob 2010-09-24 17:52:53
@CSharpNoob:他們都希望得到相同的數據,但是如果不同的客戶端可以傳遞不同類型的數據,那麼任何*適當的*實現都將不得不應對*所有*這些請求......你已經給予只會應付特定類型的來電者。這不是接口工作的方式。 – 2010-09-24 18:01:24