C# ASP.NET MVC(域模型、存储库、Fluent、服务-我的项目结构)

C# ASP.NET MVC(域模型、存储库、Fluent、服务-我的项目结构),c#,.net,asp.net-mvc,dependencies,project-structure,C#,.net,Asp.net Mvc,Dependencies,Project Structure,在我的ASP.NET MVC web应用程序中,我有: 域模型,由LINQ到SQL创建 存储库,例如 UserRepository和OrderRepository IQueryable Fluent作为IQueryable扩展方法,例如 public IQueryable GetNewOrders(此IQueryable) 服务,例如 UserService和OrderService 实用程序类和扩展方法,例如 CryptoUtility(进行散列等)和字符串等扩展 每个MVC视图专用的视图模

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

  • 域模型,由LINQ到SQL创建

  • 存储库,例如

    UserRepository
    OrderRepository

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

    public IQueryable GetNewOrders(此IQueryable)

  • 服务,例如

    UserService
    OrderService

  • 实用程序类和扩展方法,例如

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

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

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

我正在为我的案例寻找最佳的项目结构/组织,尤其是分离成不同的程序集以及这些层之间的依赖关系。不幸的是,Web资源没有详细介绍这一点

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


感谢您以简洁的方式组织这些内容,特别是哪一层应该取决于什么&装配组织。谢谢大家!

你可能想看看他们是如何组织事情的。它使用NHibernate,并且他们的回购协议有点直接与他们联系在一起,所以你需要对其进行修改。

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

  • 使用
  • 罗布·康纳利酒店

我想看看杰弗里·巴勒莫(Jeffrey Palermo)关于洋葱架构的文章。这个基本架构在任何项目中都能很好地工作,并允许您将核心项目(域层、持久性等)从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应用程序引用了我们的存储库/工作单元的域实体的核心应用程序。查看类似的示例。这其中最重要的一点是,我们能够将新的“UI”项目类型添加到同一个解决方案中,并按照预期重用我们的核心项目。例如控制台应用程序或第二个web应用程序,或您需要的任何应用程序。

您将服务放在哪里?在核心项目中?你可以。我喜欢这样做,以将我们需要构建的DLL数量保持在最低限度。但你可以把它放在一个单独的项目中。我为你把它加到树上了。我们还有域服务的概念,因此这些服务将放在域文件夹/命名空间下。不过,这将是一项仅适用于域实体的服务。您在项目下看到的服务文件夹将是一个“应用程序”服务,因为它可能已注入存储库以及其他应用程序服务来完成工作。视情况而定。:)看起来fsu-isys-489-spring-09-group-2已被拆除。我找不到它去了哪里。另外,域下的持久性和服务与核心项目根下的持久性和服务有什么区别?CodeCampServer就是一个很好的例子-