【问题标题】:ASP.NET MVC - Solution Layout SuggestionsASP.NET MVC - 解决方案布局建议
【发布时间】:2009-08-25 15:45:45
【问题描述】:

我已经使用 ASP.NET MVC 几个月了,但我仍然对我的项目解决方案的布局不满意。我正在尝试构建一个尽可能便携和可重复使用的中型网站 CMS,但它的设计存在一些明显的问题。考虑到关注点分离,我正在寻找一些关于我应该如何构建我的解决方案的建议。我找到了a similar question here,但它并没有真正针对我面临的一些问题。

现在这是我的解决方案的布局方式:

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

我目前缺少的一件主要事情是放置我的业务逻辑的地方,我觉得我一直错误地将业务逻辑放置在我的存储库类中,并将其混合到控制器操作中。显然,我非常清楚这个问题,我只是不确定我应该将我的业务逻辑放在那个解决方案布局中的哪个位置。我的解决方案结构是否需要更改,或者我可以安全地将业务逻辑保留在我的模型项目中?另外,我真的不喜欢我的 EF 上下文位于 Models 类中,但我不知道如何将数据层代码与模型中所需的实体类隔离开来。

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

【问题讨论】:

    标签: asp.net-mvc separation-of-concerns


    【解决方案1】:

    您可能想查看S#arp architecture project 使用的布局或Code Camp Server MVC 参考应用程序中使用的onion architecture。这两个项目都由不同的人投入了大量精力,以便在 asp.net MVC 和域驱动设计的上下文中很好地分离关注点。

    【讨论】:

    • 在 S#arp 架构中我应该把我的实体框架上下文放在哪里?
    • 我不知道实体框架,所以对它持保留态度。 S#arp arch 使用 nhibernate 进行数据访问。您可以做的是使存储库在其构造函数中需要 ef 上下文,然后使用控制反转容器将其注入。 jeffreypalermo.com/blog/… 包含一些示例代码,如何添加延迟加载机制,将上下文保存在为单个请求创建后的 HttpContext 中。虽然也是休眠特定样本,但它在 EF 中应该有很大不同。
    【解决方案2】:

    就我个人而言,我只是在学习 MVC。我的经验来自 ASP.NET WebForms,但我会使用您提供的链接中建议的布局。第二个答案,即:

    • 型号
    • 观看次数
    • 控制器
    • 服务
    • 测试 - 每个项目一个。

    【讨论】:

    • 不,那将是您的模型。服务又名网络服务将被模型使用,所以我想你可以用某种方式这么说。
    【解决方案3】:

    我会将 EF 上下文和存储库从模型中取出并放入数据访问层 Project.Data 中,然后将您的业务对象放入 Project.BusinessLogic (?) 中。

    这样做的好处是将两个程序集(Project.Data 和 Project.BusinessLogic)放在您可能在同一域上构建的其他应用程序中。这意味着您的下一个项目有一个非常有用的起点。

    希望对你有帮助,

    丹

    【讨论】:

    • 如果我将 EF 上下文移动到一个新项目中,那么我的实体类会随之移动,有什么办法可以解决这个问题吗?
    • 您将在模型中引用您的 BusinessLogic。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多