实体框架4代码优先:业务方法

时间:2010-10-15 17:48:30

标签: asp.net entity-framework orm poco

有人能告诉我在使用EF4代码首次POCO时,哪里是我的商业方法的最佳位置?他们应该参加POCO课吗? E.g。

public class customer
    public property Id as int32
    public property Name as string
    public property Archived as boolean

    public sub MarkAsArchived
       me.Archived = true 
    end sub

    public function EmailAllInvoices as boolean
        ...
    end function
end class

或者POCO类应该尽可能干净,并且单独的类可以用于业务逻辑,它接受构造函数中的客户POCO实例来进行工作吗?

感谢。

2 个答案:

答案 0 :(得分:1)

@Ladislav Mrnka是对的,这取决于你的架构。

您的业务规则有多复杂?它们可能经常变化吗?客户将使用您的模型,仅使用您自己的网站,或者您是否公开API,OData等?

所有需要回答的问题。

就个人而言,我们有简单的业务规则和相当简单的架构。

因此,我在服务层进行所有验证,并为我的POCO创建部分类以促进业务规则,并抛出自定义异常。

E.g

public void Add(Order order)
{
   try
   {
      order.Validate(); // method in Order.cs partial class
      repository.Add(order);
   }
   catch (InvalidOrderOperationException exc) // custom exc
   {
      // do something
   }
}

正如我所说 - 取决于你的架构。

如果您有非常复杂的业务规则,请考虑使用规范模式。

“DDD-God”(Martin Fowler)对此有一个很好的写作here

答案 1 :(得分:0)

这绝对取决于业务层的“架构”。您可以使用POCO作为数据传输对象,并具有一些将处理业务操作的上层业务层类 - 基本上我们可以讨论事务脚本模式。或者,您可以将方法放置到POCO对象中,并将它们“提升”为Domain对象。然后,您的业务逻辑将位于域对象和域服务中(某些业务逻辑功能适用于多个域对象,因此应将其放置在单独的类中)。这称为域驱动设计(但它表明了更多与架构相关的想法)。