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

时间:2011-04-12 18:39:45

标签: c# entity-framework-4 poco

假设我有一个包含以下内容的POCO:

    [DataMember]
    public Nullable<int> MetricId
    {
        get { return _metricId; }
        set
        {
            if (_metricId != value)
            {
                _metricId = value;
                OnPropertyChanged("MetricId");
            }
        }
    }
    private Nullable<int> _metricId;

我想确认MetricId严格大于0

很明显,如果我把这个规则作为数据注释放在这个类中,它将在下次重新生成poco时被覆盖。我把这个逻辑放在哪里?

谢谢!

3 个答案:

答案 0 :(得分:6)

我似乎记得建议使用部分类并滚动一个实现了你不想被覆盖的逻辑的部分类。

答案 1 :(得分:0)

在阅读了评论和回复后,似乎创建另一个类很好,但是通过使其成为局部,它将我的业务逻辑直接与实体框架和生成的POCO代码联系起来。这是令人担忧的,因为当EF4更改为EF5并且T4模板更改为T5模板时,我的代码会发生什么?另外,我觉得使用部分类作为普通类很不舒服。

相反,有人仍然可以提供更好的答案(请做),我认为创建一个独立于框架的对象(一个与EF无关的对象)更好。然后我可以将它映射到通用业务对象。类似的东西:

    static Customer Map(CustomerPOCO poco)
    {
        return new Customer
        {
            CustomerId = poco.CustomerId
            ...
            ...
        };
    }

答案 2 :(得分:0)

使用分部类不干净可以说你有产品抽象lass和派生类在线产品和商店产品。两者都继承价格属性,但价格不同。让我们说业务逻辑也可能不同。现在你还有两个你真正不需要的课程。在较大的系统中,它会倍增。