[英]RIA Services extending code-generated entity model partial classes
我正在編寫一個在服務器上具有POCO Entity Framework數據訪問權限的應用程序。 當RIA服務在Silverlight中創建模型時,它會生成一個(稱為它)“ RIA服務”模型。 也就是說,這不僅僅是我的POCO的副本。 首先,模型中的這些類是密封的,例如將List公開為EntityCollections。
由於它們是密封的,因此我無法將它們擴展為(例如)提供額外的功能(不屬於服務器)或實現接口。
但是,我可以通過實現定義的局部方法,並向其他局部類添加額外的屬性來擴展這些類的功能。
這樣做一般不鼓勵。 它是某種代碼氣味嗎? 我為什么不應該這樣做呢?
我們經常使用partial
實現,但我發現它不是代碼的味道。 實際上,我認為這比用更多代碼包裝它們要好得多。 到那時,您最好跳過RIA並編寫自己的WCF更改跟蹤器...但是我離題了。
如果您想要一個豐富的域模型,那么partial
實現是一種很好的實現方式。 默認代碼生成器為WCF RIA實體生命周期中最有意義的點創建部分方法。 通過實現這些部分,您可以擺脫Anemic Domain Model 。
如上所述,您可以實現一個接口並創建自己的方法和屬性。 IOW您不僅限於實現partial
存根。 如果所有其他方法均失敗,請根據自己的喜好修改默認代碼生成器 。 我確實從每個實體中刪除了sealed
,以使測試更加容易。
更新:這是我的刪除sealed
代碼
[DomainServiceClientCodeGenerator(typeof (CustomClientCodeGenerator), "C#")]
public class CustomClientCodeGenerator : CSharpClientCodeGenerator
{
private EntityGenerator _entityGenerator;
protected override EntityGenerator EntityGenerator
{
get { return _entityGenerator ?? (_entityGenerator = new CustomEntityGenerator()); }
}
private class CustomEntityGenerator : CSharpEntityGenerator
{
public override string TransformText()
{
return base.TransformText().Replace("sealed ", string.Empty);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.