ASP.NET MVC(域模型,存储库,流畅,服务 – 我的项目的结构)
在我的ASP.NET MVC Web应用程序中,我有:
-
域模型,由LINQ to SQL创建
-
存储库如
UserRepository
和OrderRepository
-
IQueryable Fluents作为IQueryable扩展方法,如
public IQueryable GetNewOrders(this IQueryable)
-
服务如
UserService
和OrderService
-
实用类和扩展方法,如
CryptoUtility
(做Hashing等)和String等扩展 -
ViewModels对每个MVC视图都是特殊的
-
ASP.NET MVC项目本身(控制器,视图)
我正在为我的案例寻找最好的项目结构/组织,特别是分成不同的程序集以及这些层之间的依赖关系应该如何。 遗憾的是,网络资源没有详细说明。
一个提示:目前Repository,Services,IQueryable Fluents等直接针对域模型实现,我没有它们的接口定义。 我认为这是不必要的,但松散耦合可能需要这个吗? 我的服务有一个接口(例如IOrderService),我的存储库实现了IRepository 。
感谢您以简洁的方式组织这一点,特别是哪个层应该依赖于什么和组装组织。 谢谢!
我会看看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代码上查看这个较旧的项目以获得类似的示例。 关于这一点的重要部分是我们能够在同一解决方案中添加新的“UI”项目类型,并按预期重新使用我们的核心项目。 像控制台应用程序或第二个Web应用程序,或任何您需要的。
有几个不同的项目会更详细地讨论这个问题(但请注意,它还需要一些努力来真正理解所有不同部分如何协同工作)
- S#arp架构
- Code camp服务器使用洋葱架构
- Rob Connery的店面屏幕播放系列
您可能想查看s#arp架构以了解它们如何构建事物。 它使用NHibernate,它们的repos直接绑定到它们,所以你需要修改它。