首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确使用存储库模式?

如何正确使用存储库模式?
EN

Stack Overflow用户
提问于 2009-09-30 00:09:31
回答 5查看 18.4K关注 0票数 87

我想知道我应该如何对我的存储库进行分组?就像我在asp.net mvc上看到的例子一样,在我的书中,他们基本上对每个数据库表使用一个存储库。但这似乎有很多存储库,导致您不得不调用许多存储库来进行模拟和其他工作。

所以我猜我应该对它们进行分组。然而,我不确定如何对它们进行分组。

现在我做了一个注册库来处理我所有的注册资料。然而,有大约4个表我需要更新,在此之前我有3个存储库来做这件事。

例如,其中一个表是许可证表。当它们注册时,我查看它们的密钥,并检查它是否存在于数据库中。现在,如果我需要在除注册之外的其他地点检查该许可证密钥或该表中的其他内容,会发生什么?

一个地方可能是登录(检查密钥是否过期)。

那么在这种情况下我该怎么做呢?再次重写代码(断开)?尝试将这两个存储库合并在一起,并希望在其他时间点上不需要任何方法(例如,我可能有一个方法来检查是否使用了userName -也许我会在其他地方需要它)。

此外,如果我将它们合并在一起,我要么需要两个服务层去同一个存储库,因为我认为拥有一个站点两个不同部分的所有逻辑会很长,而且我必须使用ValidateLogin()、ValdiateRegistrationForm()、ValdiateLoginRetrievePassword()等名称。

或者调用Repository,只是有一个听起来怪异的名字?

似乎很难让一个存储库有一个足够通用的名称,这样你就可以在应用程序的许多地方使用它,并且仍然有意义,我不认为在一个存储库中调用另一个存储库是一个好的做法?

EN

回答 5

Stack Overflow用户

发布于 2009-09-30 01:12:15

为了解决这个问题,我已经开始做的一件事就是实际开发包装N个存储库的服务。希望您的DI或IoC框架可以帮助简化这一过程。

代码语言:javascript
复制
public class ServiceImpl {
    public ServiceImpl(IRepo1 repo1, IRepo2 repo2...) { }
}

这有意义吗?此外,我理解在这个庄园中谈论服务可能实际上符合DDD原则,也可能不符合DDD原则,我这样做只是因为它似乎有效。

票数 5
EN

Stack Overflow用户

发布于 2009-09-30 02:55:49

我要做的就是定义一个抽象基类,如下所示:

代码语言:javascript
复制
public abstract class ReadOnlyRepository<T,V>
{
     V Find(T lookupKey);
}

public abstract class InsertRepository<T>
{
     void Add(T entityToSave);
}

public abstract class UpdateRepository<T,V>
{
     V Update(T entityToUpdate);
}

public abstract class DeleteRepository<T>
{
     void Delete(T entityToDelete);
}

然后,您可以从抽象基类派生您的存储库,并扩展您的单个存储库,只要泛型参数不同,例如;

代码语言:javascript
复制
public class RegistrationRepository: ReadOnlyRepository<int, IRegistrationItem>,
                                     ReadOnlyRepository<string, IRegistrationItem> 

等等……

我需要单独的存储库,因为我们对一些存储库有限制,这给了我们最大的灵活性。希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2010-02-18 12:28:41

使用FluentNHibernate的通用存储库实现的Here is an example。它能够持久化您为其编写映射器的任何类。它甚至能够基于映射器类生成您的数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1495553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档