【发布时间】:2010-12-02 12:08:48
【问题描述】:
我想知道我应该如何对我的存储库进行分组?就像我在 asp.net mvc 和我的书中看到的示例一样,它们基本上每个数据库表使用一个存储库。但这似乎有很多存储库导致您必须在以后调用许多存储库来进行模拟和其他东西。
所以我猜我应该将它们分组。但是我不确定如何对它们进行分组。
现在我创建了一个注册存储库来处理我所有的注册内容。但是,在我有 3 个存储库来执行此操作之前,我需要更新 4 个表。
例如,其中一个表是许可证表。当他们注册时,我查看他们的密钥并检查它是否存在于数据库中。现在,如果我需要在注册以外的其他地方检查此许可证密钥或该表中的其他内容,会发生什么情况?
一个地方可以登录(检查密钥是否未过期)。
那么在这种情况下我该怎么办?再次重写代码(break DRY)?尝试将这两个存储库合并在一起,并希望在其他某个时间点不需要任何方法(例如,也许我可能有一个方法来检查是否使用了 userName - 也许我会在其他地方需要它)。
此外,如果我将它们合并在一起,我要么需要 2 个服务层进入同一个存储库,因为我认为拥有一个站点的 2 个不同部分的所有逻辑会很长,而且我必须有像 ValidateLogin() 这样的名称, ValdiateRegistrationForm()、ValdiateLoginRetrievePassword() 等
或者无论如何调用存储库,只是有一个听起来很奇怪的名字?
似乎很难创建一个具有足够通用名称的存储库,以便您可以在应用程序的许多地方使用它并且仍然有意义,我认为在存储库中调用另一个存储库不是一个好习惯?
【问题讨论】:
-
+1。好问题。
-
感谢它困扰了我一段时间。因为我发现我在书中看到的那些太简单了,所以它们没有告诉你在这些情况下该怎么做。
-
我基本上和你做的一样,是的,如果我有一个在多个存储库中使用的 linq2sql 类,我需要更改我破坏 DRY 的表结构。不太理想。我现在计划得更好一点,所以我不需要多次使用 linq2sql 类,我认为这是很好的分离关注点,但我预见到有一天这对我来说将是一个真正的问题。
-
我在这里问了一个类似的问题(但不完全相同):stackoverflow.com/questions/910156/…
-
是的,但似乎很难针对所有情况进行计划。就像我说的那样,我可以将登录和注册合并到一个身份验证中,并有 2 个单独的层。这可能会解决我的问题。但是,如果在说我网站的个人资料页面时我想以某种原因向他们展示他们的密钥(也许我会让 htem 改变它或其他什么)会发生什么。现在我该怎么做才能打破 DRY 并写同样的东西?或者尝试创建一个存储库,以某种方式将所有这 3 个表都放在一个好名称中。
标签: c# .net asp.net asp.net-mvc repository-pattern