ASP.NET MVC(域模型,存储库,流畅,服务 - 我项目的结构)

时间:2009-08-28 22:14:51

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

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

  • 域模型,由LINQ to SQL

  • 创建
  • 存储库,例如

    UserRepositoryOrderRepository

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

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

  • 等服务

    UserServiceOrderService

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

    CryptoUtility(做Hashing等)和String等扩展

  • 每个MVC视图特殊的ViewModel

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

我正在为我的案例寻找最好的项目结构/组织,特别是分成不同的程序集以及这些层之间的依赖关系。遗憾的是,网络资源没有详细说明。

一个提示:目前Repository,Services,IQueryable Fluents等直接针对域模型实现,我没有它们的接口定义。我认为这是不必要的,但松散耦合可能需要这个吗?我的服务有一个接口(例如IOrderService),我的存储库实现了IRepository&lt; T&gt;。

感谢您以简洁的方式组织这一点,特别是哪一层应该取决于什么&amp;装配组织。谢谢!

3 个答案:

答案 0 :(得分:8)

我会看看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”项目类型,并按预期重新使用我们的核心项目。像控制台应用程序或第二个Web应用程序,或任何您需要的。

答案 1 :(得分:3)

有几个不同的项目会对此有更详细的了解(但请注意,您还需要花些精力才能真正理解所有不同部分如何协同工作)。

答案 2 :(得分:0)

您可能需要查看s#arp architecture,看看它们是如何构建的。它使用NHibernate,它们的repos直接与它们绑定,所以你需要修改它。