4

在我的 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<T>。

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

4

3 回答 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 应用程序引用了我们的存储库/工作单元的域实体的核心应用程序。查看谷歌代码上的这个旧项目以获得类似的示例。关于这一点的重要部分是我们已经能够将新的“UI”项目类型添加到相同的解决方案中,并按预期重用我们的核心项目。像控制台应用程序或第二个 Web 应用程序,或任何你需要的。

于 2009-09-02T22:24:46.043 回答
3

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

于 2009-08-28T22:24:28.650 回答
0

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

于 2009-08-28T22:18:19.723 回答