如何/在何处将业务规则应用于POCO对象?

问题描述

| 假设我有以下POCO:
    [DataMember]
    public Nullable<int> MetricId
    {
        get { return _metricId; }
        set
        {
            if (_metricId != value)
            {
                _metricId = value;
                OnPropertyChanged(\"MetricId\");
            }
        }
    }
    private Nullable<int> _metricId;
我想验证that1ѭ严格大于0 显然,如果我将此规则作为数据注释放在此类中,则下次我重新生成poco时,它将被覆盖。我应该把这个逻辑放在哪里? 谢谢!     

解决方法

我似乎记得这样的建议:利用部分类并滚动实现您不想被覆盖的逻辑的部分类。     ,在阅读注释和响应之后,似乎创建另一个类很好,但是通过将其分类,它将我的业务逻辑直接与实体框架和生成的POCO代码联系起来。这令人担忧,因为当EF4更改为EF5,而T4模板更改为T5模板时,我的代码将如何处理?另外,我只是不喜欢将局部类用作普通类。 相反,有人仍然可以提供更好的答案(请这样做),我认为创建一个独立于框架的对象(一个不与EF绑定)会更好。然后,我可以将其映射到通用业务对象。就像是:
    static Customer Map(CustomerPOCO poco)
    {
        return new Customer
        {
            CustomerId = poco.CustomerId
            ...
            ...
        };
    }
    ,使用局部类并不是很干净,可以说您拥有产品抽象类以及在线产品和商店产品的派生类。两者都继承价格属性,但价格不同。假设业务逻辑也可能不同。现在,您又有了另外两个不需要的类。在更大的系统中,它成倍增加。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...