簡體   English   中英

RIA Services擴展了代碼生成的實體模型子類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM