【问题标题】:MVC 4 with repository and unit of work pattern具有存储库和工作单元模式的 MVC 4
【发布时间】:2013-04-28 05:17:50
【问题描述】:

我知道在 mvc 中最好使用存储库模式和工作单元类作为 ASP.net MVC 项目中的设计模式。(服务层中的业务逻辑。)

我的问题是,我是 Microsoft 引入的 MVC 4 的新手。我是否也可以在 MVC 4 环境中应用上述模式(存储库和工作单元),以该设计模式开始我的项目是否是好方法。

在 MVC 中,大型 MVC 项目是否需要满足另一种类型的模式。

有没有人知道MVC 4的请评论一下,非常感谢。

【问题讨论】:

    标签: c# asp.net-mvc design-patterns asp.net-mvc-4


    【解决方案1】:

    “在 mvc 中使用存储库模式和工作单元类是很好的”——这是非常值得怀疑的,而说“被认为是今天使用的最佳模式之一”之类的话是完全错误的:模式只有好或坏在某些情况下,您无法真正判断它们是否是好的选择。

    从“我应该使用哪些模式”这个问题开始,而不首先考虑您需要编写的应用程序的具体细节,这是创建过度设计应用程序的可靠方法。

    Repository 和 UoW 已由 Domain driven design 推广,如果您沿着这条路走下去,它们会很有意义。 DDD 对于某些应用程序来说是极好的方法,但我认为这不是大多数应用程序。许多 Web 应用程序只是 CRUD 应用程序,它们不能从 DDD 中受益,也不会将对实体的每次访问都包装在存储库中——例如在这里选择微 ORM 通常是一种更明智的方法。

    如果您仍然确定您的应用确实需要这种方法,而不是自己实现所有这些东西,我建议使用像 NHibernate 这样的框架,因为您需要的不仅仅是 UoW 和 repo - 它们需要身份地图实现等。NHibernate 提供了很多开箱即用的东西(例如,它的Session 类型实际上是 UoW 的出色实现以及更多),并涵盖了许多细节,您只有在进入后才会发现必要性实现您自己的版本的详细信息。实体框架在这里也可能是一个不错的选择,尽管它不是我最喜欢的。

    当然,编写自己的代码是扩展知识的好方法,但如果您需要将其用于生产应用程序,则选择现有实现将节省大量时间、金钱和麻烦。

    【讨论】:

    • 非常感谢您提供宝贵的 cmets。但我的确切问题是该设计模式适合 MVC 4 环境吗?
    • 模式对环境不好/不好,它们对应用程序不好/好。当然,这些模式可以在 ASP.NET MVC 应用程序中非常成功地使用,但它们也可能是一个非常糟糕的选择。就个人而言,我有时会使用它们,有时不会。我也因过度设计我的应用程序而被烧毁,但要求不合理。
    • 感谢您的回复 这真的很有帮助。
    • @Prageeth - 您问题的真正答案。这取决于。我们对您要构建的内容一无所知。这可能是值得的,这可能是一个糟糕的选择。所以这取决于。
    【解决方案2】:

    仅仅因为存储库模式出现在每个教程中,并不意味着它是解决 MVC 世界中问题的事实标准。

    首先,您需要了解应用程序的复杂性。存储库可能会给您的应用程序增加不必要的复杂性。顺便说一句,您还没有提到您将如何与数据库通信。如果您计划使用任何 ORM像(Nhibernate,Entity framework)这样的工具,那么你已经有了一个很好的抽象。为什么你还需要一个抽象级别。

    关于是否使用存储库模式存在很多争论。这里有一些非常好的解释

    Do we need Repository ?

    Life without repositories - Ayende

    所有著名的 ORM 工具都使用您提到的模式(工作单元和存储库)实现。

    【讨论】:

    • 正如我在描述中提到的。他们在制作这些教程时安排与微软的会议。你应该检查Dan Whalin & John Papa 背景。他们是Microsoft MVPScott Guthrie(在他们的会议期间)也推荐它。
    • 我不是反存储库。我自己使用过,并没有真正受益。如果使用 ORM 工具,你也可以模拟它们。
    • +1 用于在跳到当今流行语之前促进思考。
    • @DotNetDreamer 存储库模式不是数据访问的万能模式。对于小型网站来说,它完全是过度杀戮。并且可以通过在控制器应该是愚蠢的时候让控制器做太多事情来增加大型站点的复杂性。仅仅因为 MVP 或 Scott Gu 推荐它,并不意味着它是绝对正确且唯一的做事方式。你的回答误导了。
    • @DotNetDreamer,所以您想说 ScottGu 已经确切知道您的应用需要什么?哇,我以为只有 Chuck Norris 能做到。
    【解决方案3】:

    查看 ASP.NET MVC 教程中的 Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application,这应该足以让您朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2016-05-10
      • 1970-01-01
      相关资源
      最近更新 更多