2010-10-15 92 views
1

任何人都可以告诉我什么时候使用EF4代码优先使用POCO时最适合放置商业方法的地方吗?他们是否应该参加POCO课程?例如。实体框架4代码优先:商业方法

​​

还是应该POCO类是尽可能的干净和一个单独的类用于其接受在构造一个客户POCO的实例工作于业务逻辑?

谢谢。

回答

0

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

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

+0

我希望能够在所有我们的项目中使用一体化实施,无论大小。 – 2010-10-16 19:50:50

+0

@Jamie Carruthers--并不那么简单,你必须对整体架构有一些想法。什么是“项目”将被共享,你如何通过编译的DLL将这些项目发布到这些项目中,或者你打算通过WCF,Web API公开操作?这里的问题是POCO的(如果你想使用WCF,你需要自我跟踪实体)。我们真的需要更多关于项目的信息。 – RPM1984 2010-10-16 21:35:47