gpt4 book ai didi

javascript - 我什么时候应该以 Angular 创建工厂或虚拟机

转载 作者:行者123 更新时间:2023-12-01 03:26:15 25 4
gpt4 key购买 nike

这就是我的 Angular 应用程序的样子。

(function () {
"use strict";

angular
.module("app")
.controller("custCtrl", custCtrl);

custCtrl.$inject = ['dataService','custFactory'];

/* @ngInject */
function custCtrl(dataService, custFactory) {
var vm = this;
//line##
vm.customer= custFactory.Create('customer');

GetCustomers();
function GetCustomers() {

dataService.read().then(function (data) {
vm.customer = data.fields;
}
});

}

return vm;
}
})();

工厂方法

(function () {
'use strict';

angular
.module('app.factory')
.factory('custFactory', custFactory);

custFactory.$inject = ['$q'];

/* @ngInject */
function custFactory($q) {
var _create = function (type) {

var obj = {};

switch (type.toString().toLowerCase()) {
case "customer":
obj = new Customer();
break;
default:
obj = null;
}

return obj;
}

return {
Create: _create
};
}
})();

查看模型

 function Customer()
{

var dto = this;

dto.Customer = {
"Name" : "",
"Gender" : "", // & so on
}

return dto;
}

如果您检查上面的//line## 上的 custCtrl,我将调用工厂方法来实例化客户对象,如下所示。

vm.customer= custFactory.Create('customer');

但是,如果我创建客户虚拟机和工厂并简单地分配一个空字符串,如下所示。

        vm.customer= {};

仍然可以正常工作。

So my question why should I create a VM & factory?? What is its benefit??

最佳答案

AngularJS 模式和最佳实践涉及遵循 MV(无论如何)模式并设计/实现具有高内聚和低耦合的模块化组件。这样您就可以轻松修改一段代码,而无需更改另一段代码。

通常,工厂或服务用作与 RESTful API 或某种服务器端代码交互的客户端代码层。通常这是工厂的唯一功能。这样您就可以将工厂注入(inject)到任何需要使用工厂功能的 Controller 中。当您需要修改调用 API 的方式时,您只需要在工厂中进行更改,而不是在每个使用该功能的 Controller 中进行更改。

与您创建的 View 模型对象类似,您只需在一处进行更改。想象一下,有五个不同的 Controller ,它们都需要使用 Customer 对象。现在,您决定删除 Name 字段并将其替换为 FirstNameLastName。您想要遍历所有 Controller 并进行更改,还是只想更改 View 模型?

给你一个简短的答案。不创建 View 模型或工厂/服务没有什么功能问题。从架构或设计的 Angular 来看,在应用程序中对关注点进行强有力的分离是非常有意义的。因此,使用工厂进行数据访问和数据对象的 View 模型是有意义的。

尝试想象您的应用程序不断增长,拥有数百个 Controller / View 和数十个工厂或服务。如果您没有从开发之初就实现这些模式和最佳实践,那么维护该应用程序将是一件非常痛苦的事情。

关于javascript - 我什么时候应该以 Angular 创建工厂或虚拟机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810854/

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