有人能告诉我在使用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实例来进行工作吗?
感谢。
答案 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对象。然后,您的业务逻辑将位于域对象和域服务中(某些业务逻辑功能适用于多个域对象,因此应将其放置在单独的类中)。这称为域驱动设计(但它表明了更多与架构相关的想法)。