2009-08-28 39 views
3

在我的ASP.NET MVC的Web应用程序,我有:ASP.NET MVC(域模型库,流利,服务 - 结构为我的项目)

  • 域模型,通过创建LINQ到SQL

  • 库如

    UserRepositoryOrderRepository

  • 的IQueryable Fluents如IQueryable的扩展法如

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

  • 服务如

    UserServiceOrderService

  • 实用工具类和扩展方法,如

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

  • 的ViewModels这是特别为每个MVC视图

  • 的ASP.NET MVC项目本身(控制器,查看)

我正在寻找最好的项目结构/组织对我的情况下,特别是分离成不同的组件以及这些层之间的依赖关系应该如何。遗憾的是,Web资源并没有详细描述这一点。

一个提示:目前资源库,服务,IQueryable的Fluents等直接对着干的领域模型实现,我没有为他们的接口定义。我认为这是不必要的,但也许这是松散耦合所需要的?我的服务有一个接口(例如IOrderService),和我的库实现IRepository < T>。

欣赏上以简明的方式组织这次你的输入,尤其是哪些层应该依靠什么&装配组织。谢谢!

回答

0

你可能想看看s#arp architecture,看看他们如何组织的事情。它使用NHibernate和他们的回购有点直接绑定到他们,所以你需要修改它。

8

我会看文章由杰弗里·巴勒莫Ø n洋葱建筑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应用程序,或任何你需要的。

+0

你在哪里提供服务?在Core项目中? – Alex 2009-09-02 22:28:15

+0

你可以。我喜欢将我们需要构建的dll的数量保持在最低限度。但是你可以把它放在一个单独的项目中。我把它加到了你的树上。我们也有域服务的概念,所以这些都会在域文件夹/命名空间下进行。这将是一项仅适用于域名实体的服务。您在该项目下看到的services文件夹将是一个“应用程序”服务,因为它可能会注入存储库以及其他应用程序服务来执行工作。这取决于。 :) – 2009-09-02 22:35:04

+2

看起来像fsu-isys-489-spring-09-group-2已被取消。我找不到它去了哪里。另外,域名下的持久性和服务与核心项目的根源之间有什么区别? – 2011-05-11 20:15:50