【发布时间】:2010-10-12 17:26:12
【问题描述】:
考虑一个使用 EF4 POCO 实体和存储库模式将信息存储在 SQL Server 数据库中的 ASP.NET MVC 2 Web 应用程序项目。到目前为止,有 3 个项目,如果算上数据库,则为 4 个:
1.) Domain.dll,没有依赖关系,公开 POCO 和存储库接口。
2.) Storage.dll,依赖于域,实现存储库接口(使用 EF 4)。
3.) Mvc.dll,依赖于#1 和#2,提供 UI 层。
4.) SQL Server 数据库 + 连接,dll 不可知(无依赖关系)。
假设我添加了另一个 Web 应用程序来托管 WCF 数据服务,它使用 Domain.dll 和 Storage.dll 提供数据库的 OData 提要:
5.) Provider.dll,依赖于Domain & Storage,提供OData服务层。
域验证逻辑在此解决方案中属于什么位置?如果域 POCO 类装饰有验证属性,WCF 数据服务是否需要其他任何东西来保护数据?将验证逻辑放入存储过程中是个好主意还是坏主意,为什么?
【问题讨论】:
-
将验证逻辑放在 SP 中是一个坏主意,因为您不能轻易更改 dbs(实际上几乎不会发生),但这意味着如果没有实际的 db(实际上是一件坏事),而且它很笨拙,无法在层级中获取错误消息。此外,您正在损害可扩展性。话虽如此,唯一键等应该存在于您的数据库中,以作为后盾。
-
正确。由于特定的验证,我实际上是在询问 sp。我的一些实体代表分层节点,因此可能存在循环分层关系。这可能是我应该通过检查数据库客户端和数据库本身来加强的地方,尽管通过触发器而不是 sp。
标签: asp.net-mvc entity-framework-4 poco validation relational-database