gpt4 book ai didi

model-view-controller - 如何思考 angularjs 中的 Controller

转载 作者:行者123 更新时间:2023-12-04 05:52:33 25 4
gpt4 key购买 nike

我正在用 Angularjs 触及表面,并认为我会在 SO 的优秀人员面前提出一个概念性问题。这是来自经验丰富的开发人员的新手问题。

该应用程序具有仪表板要求......一个显示应用程序许多部分的内容的单个页面。不同的用户类型获得不同的仪表板。我们已经有一个遗留后端,所以第一个任务是构建仪表板以显示其新的 RESTful 服务层的许多位。

我想知道我应该如何从概念上考虑支持这一点所需的 Controller ?

第一个问题是……它们应该以模型为中心还是以 View 为中心?换句话说,它们应该是“以 View 为中心”的 Controller ,其中包含“仪表板”这个词吗?或者他们应该更关注他们所代表的模型元素,比如“任务”、“联系人”、“通知”。还是应该同时存在仪表板 Controller 与以模型为中心的 Controller 一起使用的地方?

下一个问题是…… Controller 应该代表什么级别的粒度?如果以 View 为中心的“仪表板” Controller ,它们应该是“ManagerDashboardController”和“WorkerDashboardController”吗?如果以模型为中心的 Controller ,是否应该有诸如“LateTasks”和“OnTimeTasks”之类的 Controller ,因为我需要在仪表板的不同部分显示它们,数据略有不同?

我正在寻找基于现实世界经验和/或我尚未找到的重要链接的引用的切实建议。

最佳答案

以下是我过去 6 个月在 Angular 中开发业务应用程序的看法:

Controller 的 Angular 色

  • 初始化(加载初始数据,设置选项)
  • 通过 $scope
  • 向模板公开变量和函数
  • 应用程序流程(通过公开可以更改状态的函数,或 $watch es)

  • 我发现,就像在传统的 MVC 框架中一样,Angular 应用程序中的 Controller 应该非常纤薄。 几乎没有任何业务逻辑应该在 Controller 中 , 而是应该封装在您的模型中。在听了 Miško Hevery 的演讲后,我得出了这个结论: the purpose of the scope is to refer to the model and not be the model。” 这是我从那个演示中得到的最有值(value)和最有启发性的一句话(尽管我建议观看整个视频);这条线直接导致我将我的 Controller 缩小了近 50%-70%。

    例如,我公司有一个 Order 的概念。 .我创建了一个模型,该模型封装了该业务对象的所有属性及其行为,并将它们注入(inject)到 Controller 中。我们拥有的一项业务规则是能够添加 Booking (另一个业务对象)到 Order .最初在我的 Controller 中,我有一个 $scope.addBooking函数首先创建了一个新的 Booking ,然后接受订单并执行 $scope.order.bookings.push(newBooking) .相反,我将这个业务逻辑( addBooking 函数)直接移到了我的 Order 中。模型,然后在模板中我可以执行类似 <button ng-click="order.addBooking()">Add Booking</button> 的操作无需在我的 Controller 中添加一行代码。

    当我第一次开始使用 angular 时,我在 Controller 中放入的很多代码,我发现可以剥离并放置在我的模型、指令或服务中(在我的例子中主要是前两个)。留在我的 Controller 中的其余代码几乎都属于我上面列出的上述 3 个 Angular 色之一。可能是初始化代码(例如,触发 AJAX 请求以获取相关业务对象的数据)、对象的范围分配或处理应用程序流的函数的范围分配(例如 $scope.save$scope.cancel 可能会将您送回到不同的页面)。

    Controller 应该以模型为中心还是以 View 为中心?

    这是一个有趣的问题,我以前没有考虑过。当我听到以 View 为中心时,我会想到一个 Controller ,它主要处理 View 以及事物的显示方式。我觉得不应该有任何纯粹以 View 为中心的 Controller ,原因是看起来以 View 为中心的 Controller 可能可以转换为指令。您提到以 View 为中心的 Controller 就像 Dashboard Controller ,这听起来像是绝对可以做成通用指令的东西。你的指令应该封装你的大部分 View 逻辑,而你的 Controller 专注于简单地将你的模型暴露给 View 以供使用(回到 Controller 的 Angular 色)。这让我认为 Controller 应该更频繁地以模型为中心。

    我认为我能得出的唯一结论是,如果 Controller 开始变得过于以 View 为中心(有许多主要处理 View 和 UI 行为的变量和函数),那么这表明你的 Controller 的某些部分可以被拉出成一个指令,使你的 Controller 更 slim 。

    关于model-view-controller - 如何思考 angularjs 中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026004/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com