asp.net-mvc - 可以在域对象上使用属性和 IValidatableObject 吗?

标签 asp.net-mvc domain-driven-design

我习惯于使用实体对象,现在我转向 DDD 原则,所以我将开始使用域对象。

我习惯用 RequiredAttributeStringLengthAttribute 等属性来装饰我的实体对象的属性。我还习惯于在我的实体对象上实现 IValidatableObject

我的问题是 - 在我的域对象上使用属性和 IValidatableObject 是否可以接受?与DDD一致吗?谢谢。

最佳答案

你的领域模型应该只与业务概念一起工作,它不应该与 DAL 或 View 有任何直接关系。您应用的属性意味着您将域模型用作 View 模型。创建单独的 View 模型。不要将描述存储模型的实体对象用作域的根类。为域对象创建新类。添加清晰解释业务的方法 -

ChangeLastName(string newName) 而不是 obj.LastName = "Some name"

CreateNewPost(string text,string author) 而不是 obj.Posts.Add(..)

您可以编写一些扩展方法来进行映射,例如 ToViewModel,或者做其他事情。一个有趣的设计/基础架构模式是 CQRS 和 EventSourcing。它允许您避免映射,但有一些缺点(如聚合之间的事务)。最后 - 在大多数情况下,简单的 CRUD 操作更适合 - 快速、简单、容易。

关于asp.net-mvc - 可以在域对象上使用属性和 IValidatableObject 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742769/

相关文章:

domain-driven-design - DDD 与 N 层(3 层)架构

domain-driven-design - kafka 中每个聚合根事件的单个或多个主题(流)

php - 实体、存储库和组合 - 依赖注入(inject)

jquery - MVC 主详细信息保存错误

asp.net-mvc - @Html.CheckboxFor 不在 mvc 中显示

asp.net-mvc - Windows Azure 上是否可以存在与 Windows Server 上相同的 Web 应用程序?

c# - ASP.NET HttpContext.Current.Session 突然总是空的

c# - 如何使用 C# .NET 4 实现 DDD

grails - 如何在 Grails 中拆分域逻辑和数据访问

javascript - 在 mvc razor View 中对文本框使用 onblur() 事件