【发布时间】:2011-12-25 20:23:23
【问题描述】:
我正在尝试遵守最佳的多层设计实践,并且不希望我的 MVC 控制器与我的 DAL(或任何 IRepository)进行交互。它必须通过我的业务服务层来执行正确的业务规则和验证。验证 - 我不想在我的域模型实体上使用各种验证属性(例如 [必需])在控制器中执行验证,因为这会照亮我的前端。更不用说这个服务也可以通过 WPF 前端来实现。
由于我的验证是在我的服务层中完成的,将值返回到 UI 的最佳做法是什么?我不想要'void addWhatever(int somethingsID)',因为我需要知道它是否失败。它应该是一个布尔值吗?它应该是一个枚举吗?我应该利用异常处理吗?或者我应该在将验证属性装饰到模型对象时返回一些类似于 MVC 使用的 IValidationDictionary 对象? (如果需要,我可以稍后在 UI 中使用适配器模式)
我想将我的实体从控制器传递到服务层,并了解验证/数据持久性是否失败。我也不想忽略这样一个事实,即我需要返回一个视图,以指示每个可能未通过验证的字段的正确错误消息(我希望尽可能轻松地做到这一点)。
我有几个想法,但都觉得不对劲。我觉得答案包括 View-specific-model 实体,但这会导致必须处理的整个映射问题,更不用说这违反了 DRY(不要重复自己)原则。最佳做法是什么?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 validation model-view-controller