需要有关ASP.NET MVC 3架构的一些指导

Dav*_*ham 10 .net c# repository-pattern asp.net-mvc-3

我是一位经验丰富的.NET开发人员,主要使用webforms.我熟悉MVC但尚未商业化使用.我目前正在这个领域进行一些自我教育,并且对建筑学主题的意见分歧感到有些困惑,让我在这个问题的前面加上一个理解,即没有正确或错误的答案,但我只是在寻求什么是优雅的解决方案.

我会开始时说,我不使用实体框架或任何形式的ORM的 - 我想直接实现自己的业务对象和数据访问代码(使用ADO,存储过程等),以确保它们是最佳的,这是一个个人喜好.这是我努力寻找一致信息的地方,因为看起来大多数信息都与使用LINQ to SQL或实体框架有关.

我的应用程序已经结构化了以下项目:

  • Web(MVC 3 Web应用程序)
  • 模型(类库)

只有两个项目,因为我遇到了解耦问题; 这是我问题的根源.我的模型类库包含......

  • 带有字段和属性的经典业务对象
  • 每个业务对象的存储库类,包含数据访问代码(ADO.NET直接SqlDataReaders等)
  • 每个存储库类的接口

我遇到的问题是所有这些层之间的依赖关系.它感觉不对劲!

1.业务对象应该包含实现业务逻辑的方法,所以除了字段和属性之外还有实现任何所需逻辑的方法吗?

2.存储库类执行数据访问代码但是知道业务对象,这又感觉不对,数据访问代码应该位于自己的类库中,对这些对象一无所知?

3.控制器(在Web层中)利用存储库接口,但为什么?它们不应该包含业务逻辑,"模型"或业务对象应该包含哪些?控制器当然不应该包含业务逻辑,所以这是不对的.我不希望存储库中存在业务逻辑,因为它们正在访问数据库.

我正在努力为应用程序找到一个优雅的架构,只是一个基本的概述如何实现我自己的对象,我自己的数据访问代码,并确保应用程序松散耦合.有人可以给我任何指导吗?

Pur*_*ome 6

我建议对您的解决方案结构进行一些更改.

例如,项目的结构可以如下: -

核心图书馆

这将是简单的POCO,代表您的域数据和任何服务的接口.这里没有业务逻辑.只是简单的属性.

例如.

public class User {public int UserId {get; 组; public string Name {get; 组; }}

- Core
      \Entities <-- Poco's
      \Services <-- Interfaces for services
Run Code Online (Sandbox Code Playgroud)

服务

这将是您包含业务逻辑的地方.用户如何验证?我们如何计算订单何时应自动存档或其他什么?一般来说,我不在这里做任何数据库的东西.

知识库

这是您执行基本数据库操作的地方.你说你没有使用L2S或EF等.没有probs.我会认真地考虑使用Micro-ORM,比如DapperMassive.

测试

你正在做单元和集成测试,对吧?我建议xUnit或nUnit用于测试框架.

Web应用程序

这是MVC3应用程序.我建议使用StructureMap进行依赖注入.(你正在使用IoC/DI,对吧?)

你可能首先想到 - >那是SOOO很多项目,对吗?好吧,很容易将其分成两个项目.

  1. Web应用程序
  2. 测试项目

并且核心库,服务,存储库都作为文件夹存在于Web应用程序项目中.

尝试而不是过度设计Visual Studio解决方案.大多数人认为他们需要大量的项目和抽象的抽象.因为这是他们认为其他人正在做的事情,这是正确的事情.好吧,那段思路是在2000年初......而且在2012年 - 从那时起,很多shiz都发生了变化.

尝试使用DI/IoJ,NuGet将这些库下载到您的解决方案中,使用Micro-OR/M进行数据访问和测试项目.

一些项目要检查,重新:如何布局:

  1. JabbR.net
  2. RavenOverflow