我一直在阅读关于在ASP.NET MVC项目中放置业务逻辑一段时间,我仍然不能弄清楚一些事情。
1 – 域模型。这些真的是什么?在我的模型文件夹中,我只有一堆类对应我的数据库。我先使用EF代码。我假设这些是我的域模型。
2 – 服务层。 This answer建议一个服务层,我认为这是完全有道理的。我决定和这个一起去。然而,Martin Fowler’s “Anemic Domain Models”文章搞砸了我的心。
我不知道如何添加逻辑到我的领域模型。
我经历了许多与业务逻辑相关的问题,每个都提出了1或2.我不明白是如何实现第一个。将方法添加到实体类(我的域模型)根本没有意义。为什么第二种方法被认为是坏的?
解决方法
首先,您的Asp.Net MVC项目中的Model文件夹应该用于viewmodels。这些是您的控制器发送到您的视图的模型。它们应该针对视图进行高度优化,这意味着只有视图所需的属性,而没有别的。
您正在进行的,域模型,与业务模型相同,并且属于您的业务层。 Asp.Net MVC项目中的Model文件夹是您的UI层的模型。
第二种方法,在你的服务(真正的业务)层的业务逻辑不被认为是坏的。它是你的数据层和你的UI层(3层架构)之间非常好的缓冲区。您的数据层处理从Web服务或数据库获取数据,并且您的业务/服务层将处理将该数据转换为业务/域模型。它还拥有任何业务逻辑,如计算等。
这些业务/领域模型通常是POCO,但不一定是POCO。这是我有时设置我的商业模式:
public class BusinessObject { private DataObject _dataObject; public BusinessObject(DataObject dataObject) { _dataObject = dataObject; } public int BusinessId { get {return _dataObject.Id;} set {_dataObject.Id = value;} } public string Name { get {return _dataObject.Description;} set {_dataObject.Description = value;} } }