- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我仍在不断地寻求构建(和理解)解耦、IoC、DI 等的现代编程约定。我正试图弄清楚如何构建存储库。我查看了 Database abstraction layer design - Using IRepository the right way? 的帖子这非常有帮助,但我仍然有一些问题一直让我感到困惑。
我的程序现在有 4 层...
Web (Project | ASP.NET MVC Application) - References Models.dll and Persistence.dll
Models (Domain Objects)
Persistence (Fluent nHibernate Mapping of Domain Objects)
Utilities (Providers, Repositories)
MembershipProvider
中。类(class)
CreateUser
方法。然而,这存在于 Utilities 项目中。到目前为止,Utilities 还没有关于 nHibernate 的知识。只有 Persistence Project 对 nHibernate 有任何了解。
CreateUser
方法需要查询我的数据库。那么这里的最佳做法是什么?我创建一个
UserRepository
在
Persistence
项目,只需创建一个名为
CheckEmail
的完整方法?还是我只是将 nHibernate .dll 添加到我的
Utilities
项目,并在提供者中编写 session 查找?
最佳答案
您的存储库应该真正在您的 Persistence 程序集中实现。假设您正在对它们进行单元测试,您将为域程序集中的每个存储库定义接口(interface)。
您的 CreateUser
方法不应直接查询数据库以确定电子邮件地址是否已存在,而是在您的 DoesEmailExist
中创建一个单独的方法它负责进行检查。每个方法都应该有一个单一的职责。
针对jfar的疑问:
没错,域定义了可以做什么,定义接口(interface)如Domain.IUserRepository.Create(User user)
.然而,该域没有定义任何实现。
假设您开始使用 Entity Framework ,您可能会创建一个 Persistence
实现域中定义的接口(interface)的程序集。因此,从上面的域接口(interface)开始,我们实现了该接口(interface):
namespace Persistence
{
public class UserRepository : Domain.IUserRepository
{
public void Create(User user)
{
// use Entity Framework to persist a user
}
}
}
IUserRepository
作为 Entity Framework 或 NHibernate 实现,您的 MVC 应用程序不关心任何一种方式。
Persistence
程序集引用了
Domain
,以及
Domain
完全正确地没有提及
Persistence
.
关于asp.net-mvc - 仍然迷失在存储库和解耦,ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390489/
为什么 pickle 重用现有的 Python 类“C”而不是从 pickle 字节重建类?有没有一种方法可以在没有副作用的情况下 pickle 和解 pickle ? 这是我的回复 session
我是一名优秀的程序员,十分优秀!