ASP.NET MVC - 解决方案布局建议

5
我已经和ASP.NET MVC一起工作了几个月,但是我仍然对我的项目解决方案的布局不满意。我正在尝试构建一个中型网站CMS,该CMS尽可能便携和可重用,但是设计上存在一些明显的问题。我正在寻求关于如何考虑关注点分离来构造我的解决方案结构的建议。我发现这里有一个类似的问题,但它并没有针对我面临的一些问题。

目前我的解决方案布局如下:

+Project.Controllers - 所有控制器类
P+roject.Controllers.Tests
+Project.Core - 实用程序类,包括重复任务和一些配置处理程序(这个项目需要更好地完善) +Project.Core.Tests
+Project.Models - 模型类,Entity Framework上下文和存储库类 +Project.Models.Tests
+Project.Web - 所有视图和内容

我目前缺少的一个重要部分是放置业务逻辑的地方,我感觉将业务逻辑错误地放在了我的存储库类中,并将其混杂在控制器操作中。显然,我非常清楚这个问题,但是我不确定应该在哪里放置我的业务逻辑。我的解决方案结构需要改变吗?还是我可以安全地将业务逻辑放在我的模型项目中?此外,我真的不喜欢我的EF上下文在模型类中,但我不知道如何隔离数据层代码以及我的模型中需要的实体类。

其他人如何布置他们的生产ASP.NET MVC解决方案呢?

3个回答

4

在S#arp架构中,我应该把Entity Framework上下文放在哪里? - Nathan Taylor
1
我不熟悉EntityFramework,所以请谨慎参考。S#arp arch使用nhibernate进行数据访问。您可以在Repository的构造函数中要求ef上下文,然后使用Inversion of Control容器进行注入。http://jeffreypalermo.com/blog/use-this-nhibernate-wrapper-to-keep-your-repository-classes-simple/ 包含一些示例代码,说明如何添加延迟加载机制,并将上下文保留在HttpContext中,以便为单个请求创建。虽然这是一个nhibernate特定的示例,但在EF中也应该没有太大区别。 - olle

1

就我个人而言,我只学习MVC。我的经验来自于ASP.NET WebForms,但我会选择您提供的链接中提出的布局。也就是第二个答案:

  • 模型
  • 视图
  • 控制器
  • 服务
  • 测试 - 每个项目一个。

不,那应该是你的模型。服务(又称网络服务)将被模型消耗,所以从某种意义上说,你可以这么说。 - Finglas

0
我会把EF上下文和Repositories从Models中移出,放到数据访问层Project.Data中,并将业务对象放在Project.BusinessLogic中。
这样做的好处是可以将这两个程序集(Project.Data和Project.BusinessLogic)放到同一域中可能构建的其他应用程序中。这意味着您的下一个项目有了一个非常有用的起点。
希望这能帮到你,

如果我将EF上下文移动到新项目中,那么我的实体类也会随之移动,有没有办法解决这个问题? - Nathan Taylor
你会在你的模型中引用你的业务逻辑。 - Daniel Elliott

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