它们是一样的吗?刚刚看完罗布·康纳利的店面教程 https://www.asp.net/mvc/videos/mvc-1/aspnet-mvc-storefront/aspnet-mvc-storefront-part-1-architectural-discussion-and-overview它们似乎是相似的技术。我的意思是,当我实现 DAL 对象时,我有 GetStuff、Add/Delete 等方法,并且我总是先编写接口,以便稍后可以切换数据库。
我是否混淆了事情?
你绝对不是那个混淆视听的人。 :-)
我认为这个问题的答案取决于你想成为一个多么纯粹的人。
如果您想要严格的 DDD 观点,那将带您走一条路。如果您将存储库视为一种模式,它帮助我们标准化了分隔服务和数据库的层的接口,那么它将让您失望。
从我的角度来看,存储库只是一个明确指定的数据访问层。或者换句话说,是实现数据访问层的标准化方法。不同的存储库实现之间存在一些差异,但概念是相同的。
有些人会对存储库施加更多的 DDD 约束,而另一些人则将存储库用作数据库和服务层之间的便捷中介。像 DAL 这样的存储库将服务层与数据访问细节隔离开来。
一个似乎使它们不同的实现问题是,存储库通常是使用采用规范的方法创建的。存储库将返回满足该规范的数据。我见过的大多数传统 DAL 都会有一组更大的方法,其中该方法将采用任意数量的参数。虽然这听起来似乎是一个很小的差异,但当您进入 Linq 和 Expressions 领域时,这是一个大问题。
我们的默认存储库界面如下所示:
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
这是 DAL 还是存储库?在这种情况下,我猜两者都是。
Kim
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)