ASP.NET MVC(领域模型,仓储,流畅接口,服务 - 我的项目结构)

4
在我的ASP.NET MVC web应用程序中,我有以下内容:
- 由LINQ to SQL创建的域模型 - 存储库,例如UserRepository和OrderRepository - IQueryable Flents作为IQueryable扩展方法,例如public IQueryable<Order> GetNewOrders(this IQueryable<Order>) - 服务,例如UserService和OrderService - 实用类和扩展方法,例如CryptoUtility(执行哈希等操作)和String等扩展 - ViewModel,针对每个MVC视图而特制 - ASP.NET MVC项目本身(控制器、视图)
我正在寻找最适合我的情况的项目结构/组织,特别是将其分成不同的程序集以及这些层之间的依赖关系应该如何。网络资源很遗憾没有详细介绍这一点。
一个提示:目前存储库、服务、IQueryable Fluents等直接针对域模型实现工作,我没有为它们定义接口。我认为这是不必要的,但也许这需要松耦合?我的服务有一个接口(例如IOrderService),我的存储库实现了IRepository<T>。
请给出组织这些内容的简洁方式,特别是哪个层应该依赖于哪个层和程序集组织。谢谢!

3个回答

8
我建议您查看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应用程序引用核心应用程序来获取域实体,我们的存储库/工作单元。查看此旧项目在Google Code上,以获得类似的示例。这个好处在于我们能够向同一解决方案中添加新的“UI”项目类型,并像预期的那样重复使用我们的核心项目。比如控制台应用程序或第二个Web应用程序,或者您需要的任何其他类型。

你把服务放在哪里?在核心项目里吗? - Alex
你可以这样做。我喜欢将需要构建的dll数量保持最少。但是你也可以将它放在一个单独的项目中。我已经为你将其添加到树中了。我们还有领域服务的概念,因此这些服务将放在领域文件夹/命名空间下。这将是一个仅与领域实体一起工作的服务。你在项目下看到的服务文件夹将是一个“应用程序”服务,因为它可能会注入存储库以及其他应用程序服务来完成工作。这取决于情况。 :) - rmontgomery429
3
看起来 fsu-isys-489-spring-09-group-2 已被删除,我找不到它的位置了。此外,在 Domain 下与 Core 项目根目录下的 Persistence 和 Services 有什么区别? - Alex Angas

3

编码训练营服务器是一个很好的例子。 - rmontgomery429

0
你可能想要查看s#arp architecture来了解他们如何构建结构。它使用NHibernate,他们的repos与其直接相关,因此您需要进行修改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接