【问题标题】:Features folders in Angular and MVC / Web API applicationAngular 和 MVC / Web API 应用程序中的功能文件夹
【发布时间】:2016-08-02 22:58:39
【问题描述】:

我正在开发一个使用 ASP.NET MVC、Web API 和 Angular JS 的项目。

我正在考虑将项目结构从经典 MVC(相同类型的文件夹包装文件 - 控制器等)更改为功能文件夹:

所以这些文件夹可以描述如下:

  1. 资产:图像、字体……
  2. 功能:功能列表(博客、主页、共享...)
    共享所有功能的通用文件;一个特征可能包含:
    A) Angular 控制器和服务;
    B) ASP.MVC 控制器、模型、模型验证器; C) 特性中使用的特定 CSS 样式。
  3. Handlers:处理消息(命令等)的服务层处理器;
  4. 助手:基础设施文件;
  5. 消息:服务层消息(命令等);
  6. 脚本:供应商脚本(Angular、Jquery 等);
  7. 样式:全局样式(reset.css 等);

问题

  1. 在博客功能上,我将显示一个帖子列表。 BlogController 调用 PostService(?) 从 API 获取帖子? 每个返回的帖子都有一个标题、一个正文和要显示的标签。

    在主页上,我显示最近的帖子,但只显示标题。 那么 HomeController 在 Post 特性中调用 HomeService 还是 PostService 呢?

  2. 想象一下在博客功能上我正在编辑一篇新帖子。 在博客控制器中,我调用 PostService 来获取该帖子。 但我需要用标签填写一个选择列表。 所以我在博客功能中需要一个 TagsService 和一个 TagsController 吗?

这两个问题可能看起来很奇怪,但它们帮助我解决了我对这种组织应用程序的许多疑问。

有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc angularjs asp.net-web-api


    【解决方案1】:

    功能文件夹很棒,尤其是从长远来看。

    我建议将与特定功能相关的所有内容放在一起,包括处理程序。

    重新思考服务。在大多数情况下,它们是不需要的(除非您为客户公开服务)。

    将 Helpers 重命名为 Infrastructure。

    结帐 MediatR

    【讨论】:

    • 我认为您在此示例中的建议来自 MediatR github.com/jbogard/ContosoUniversity 的同一作者。我已经在使用 MediatR,但我缺少的是如何在 Contoso 大学提交错误的模型后“重新填充”模型的属性。有什么想法吗?
    • 看看基础设施文件夹下的模型绑定器
    • @Miguel 这是非常聪明的一点——无需重新填充属性!这是因为它“劫持”了 POST 并使用 Ajax 提交它们,然后一些 javascript 会在页面上显示任何错误,或者在成功时重定向。
    猜你喜欢
    • 2019-04-06
    • 2019-01-09
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多