【问题标题】:ASP.NET MVC (Domain Model, Repository, Fluent, Services - Structure for my Project)ASP.NET MVC(域模型、存储库、Fluent、服务 - 我的项目的结构)
【发布时间】:2010-11-23 21:26:12
【问题描述】:

在我的 ASP.NET MVC Web 应用程序中,我有:

  • 由 LINQ to SQL 创建的域模型

  • 仓库等

    UserRepositoryOrderRepository

  • IQueryable Fluents 作为 IQueryable 扩展方法,例如

    public IQueryable<Order> GetNewOrders(this IQueryable<Order>)

  • 服务如

    UserServiceOrderService

  • 实用类和扩展方法如

    CryptoUtility(做散列等)和字符串等扩展

  • 每个 MVC 视图专用的视图模型

  • ASP.NET MVC 项目本身(控制器、视图)

我正在为我的案例寻找最佳的项目结构/组织,尤其是分离成不同的程序集以及这些层之间的依赖关系应该是什么样子。不幸的是,网络资源并没有详细说明这一点。

一个提示:目前 Repository、Services、IQueryable Fluents 等直接针对域模型实现工作,我没有为它们定义接口。我认为这是不必要的,但也许这是松耦合所需要的?我的服务有一个接口(例如 IOrderService),我的存储库实现了 IRepository

感谢您对以简洁的方式组织此内容的意见,尤其是哪一层应取决于什么和装配组织。谢谢!

【问题讨论】:

标签: c# .net asp.net-mvc dependencies project-structure


【解决方案1】:

我会看看 Jeffrey Palermo 关于洋葱架构 here 的文章。这种基本架构适用于任何项目,并允许您将核心项目(域层、持久性等)与 Web 项目分开。

我们将它与 MVC/StructureMap/FluentNHibernate 一起使用,并取得了巨大的成功。

我们最终得到了一个类似于下面的结构。

> trunk
  + build (build scripts)
  + lib (external libraries)
  > src (source code)    
   >> Organization.App (solution name)
     >> Organization.App.Core (code library)
        + Config
        > Domain
          > Model
          > Persistence
          > Queries
          > Services
        > Persistence
        > Services
     >> Organization.App.Web (mvc web app)
        > Assets
          + Images
          + Scripts
          + Stylesheets
        + Controllers
        + Views
        + ViewModels

这是基本的想法。 Web 应用程序引用了我们的存储库/工作单元的域实体的核心应用程序。查看this older project on google code 以获取类似示例。关于这一点的重要部分是我们已经能够将新的“UI”项目类型添加到相同的解决方案中,并按预期重用我们的核心项目。比如控制台应用或第二个网络应用,或者任何你需要的东西。

【讨论】:

  • 你把服务放在哪里?在核心项目中?
  • 你可以。我喜欢这样将我们需要构建的 dll 数量保持在最低限度。但是你可以把它放在一个单独的项目中。我为您将其添加到树中。我们也有域服务的概念,因此它们将位于域文件夹/命名空间下。不过,这将是一项仅适用于域实体的服务。您在项目下看到的服务文件夹将是一个“应用程序”服务,因为它可能注入了存储库以及其他应用程序服务来工作。这取决于。 :)
  • 看起来 fsu-isys-489-spring-09-group-2 已被删除。我找不到它去了哪里。另外,Domain 下的 Persistence 和 Services 与 Core 项目根下的 Persistence 和 Services 有什么区别?
【解决方案2】:

几个不同的项目确实对此进行了更详细的介绍(但请注意,要真正了解所有不同部分如何协同工作也需要付出一些努力)

【讨论】:

  • 代码营服务器就是一个很好的例子。
【解决方案3】:

您可能想查看s#arp architecture 以了解它们的结构。它使用 NHibernate,并且它们的存储库与它们直接相关,因此您需要对其进行修改。

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多