1

我对有关客户端验证或模型绑定的答案不感兴趣。确实,这个问题可能适用于 MVC 之外的任何数据访问类库,但我认为问题是相似的。

我目前正在使用存储库模式与我的实体(模型)进行数据访问。目前,存储库处理所有 CRUD 操作,但我想我希望我的模型负责保存自己以进行验证。我该如何处理?

我可以在我的模型中添加一个 IsValid 方法,存储库可以调用该方法然后可以在存储库保存模型之前运行我的所有业务逻辑,但是没有任何东西可以强制存储库调用此验证逻辑,对吗?

如果我希望模型有一个 Save 方法,那么他们保存自己的正确方法是什么?他们不应该回电到存储库吗?

关于我应该如何处理这个问题的任何想法?

谢谢!

4

1 回答 1

2

允许模型验证保存操作本身并没有错;返回 false 或抛出异常甚至是可行的。当您必须向用户提供有关他们输入的数据无效的原因的反馈时,就会出现困难。

验证可以而且应该首先在视图中进行。这可以很容易地使用 jQuery 库在客户端完成。但是数据还是要在用户提交后服务器端验证,如果数据还是有问题,还是要给用户一个解释。

由于需要提供用户反馈,因此可以在View Model对象中有效地提供此类服务器端验证。这个数据对象有两个目的:首先,它将在视图和控制器之间传递的数据封装在一个强类型对象中。其次,它提供了一个方便的地方来执行验证,而不需要控制器或视图中的验证逻辑。

如果使用 Linq to SQL,则视图模型可以是实际数据模型类的扩展,使用 C# 中的 partial 关键字。这允许您使用生成的 Linq to SQL 类的现有 ORM 功能,同时添加额外的验证功能。我假设这在实体框架和其他 ORM 中的工作方式相同。

视图模型在此处的 NerdDinner 教程中进行了描述:http: //nerddinnerbook.s3.amazonaws.com/Part6.htm

此处描述了验证过程:http:
//nerddinnerbook.s3.amazonaws.com/Part3.htm

于 2009-09-16T23:42:37.473 回答