2011-11-15 24 views
1

假设我在.NET应用程序中使用传统的3层应用程序(UI-BLL-DAL),那么应该使用busniess规则来引用生成的Entity类?你会用一个部分类扩展实体并在那里添加规则,将实体通过BLL映射传递给一个busniess对象并在一个单独的类中处理规则,或者完全不同的东西?到目前为止,常用的做法是什么?Busniess规则如何适合实体框架生成的Entites?

谢谢,

回答

1

不要把业务逻辑放在你的实体中。实体存在将数据库接口映射到应用程序,因此aren't really even objects。另外,将商业逻辑放入你的实体中会使它们变得肥胖和困惑。您将拥有一些用于数据库映射的属性。其他代表运行时间的问题。您可以在L2E查询中调用一些方法。有些你不能。一团糟。此外,它使您的业务逻辑深深地束缚在EF代码中,这是一个糟糕的问题分离。

我们为业务流程编写服务。每个服务都是构造函数注入其所需数据的存储库。业务逻辑是与EF映射关注完全分开。它甚至可能不使用EF类型。例如,您可以编写如下代码:

var q = from l in Context.Animals.OfType<Lemur>() 
     select new LemurDto 
     { 
      Id = l.Id, 
      IsKing = l.Name.Equals("Julien XIII") 
     }; 
var service = new LemurCountService(q); 
return service.Inventory(); 

因此,在这种情况下,LemurCountService完全独立于EF。

+0

不错,所以在你的情况下,注入存储库的服务正在预先执行业务规则?同样对于数据绑定之类的东西:您的业务对象是否会映射到实体的某些属性,然后又被绑定到,还是直接绑定到实体? – atconway

+2

关于服务,这是正确的。不,我不约束实体; [我绑定到演示模型](http://blogs.teamb.com/craigstuntz/2009/12/31/38500/)。 –

+1

完美,完美,完美!这正是我所期待的。相当类似于在DDD中的应用程序服务层中创建从域对象映射的表示视图。顺便说一下,感谢您的帮助。 – atconway