.Net 3.5中的新擴展允許將功能從接口中分離出來。擴展接口模式
例如.NET 2.0中
public interface IHaveChildren {
string ParentType { get; }
int ParentId { get; }
List<IChild> GetChildren()
}
能(3.5)變爲:
public interface IHaveChildren {
string ParentType { get; }
int ParentId { get; }
}
public static class HaveChildrenExtension {
public static List<IChild> GetChildren(this IHaveChildren) {
//logic to get children by parent type and id
//shared for all classes implementing IHaveChildren
}
}
在我看來這是許多接口,一個更好的機制。他們不再需要抽象基礎來分享這些代碼,而且功能上代碼的工作原理是一樣的。這可以使代碼更易於維護並且更易於測試。
唯一的缺點是,一個抽象的基地實現可以是虛擬的,但可以是圍繞工作(將一個實例方法隱藏具有相同名稱的擴展方法是什麼?這將是混亂的代碼,這樣做?)
不定期使用此模式的其他原因?
澄清:
是的,我看到的擴展方法的傾向是無處不在與他們就結了。我會特別小心有任何.Net的值類型沒有經過同行評審的一個很大的(我認爲我們必須對字符串的唯一一個是.SplitToDictionary()
- 類似.Split()
但考慮鍵值分隔符太)
我覺得有一個整體的最佳實踐辯論有;-)
(順便說一句:DannySmurf,你下午聽起來很嚇人。)
我專門詢問這裏有關使用擴展方法,而在以前,我們有接口的方法。
我想避免很多級別的抽象基類 - 實現這些模型的類大多已經有了基類。我認爲這個模型比添加更多的對象層次結構可以更容易維護,並且不會過度耦合。
這是MS已經做了什麼IEnumerable和IQueryable的Linq?
我也喜歡這種方法zooba,但我沿着部分類的路線,其中部分舉行了所有的「擴展」。 – 2013-01-02 09:42:57