构建丰富模式的良好实践
Good practice to build a rich model
我刚刚读到这篇文章,解释了用Angular/Restangular构建丰富模型的方法。
本文展示了以下代码,一个通过Restangular检索所有proposals
的服务。
angular.module('services', ['restangular']).
factory('ProposalsSvc', function(Restangular) {
Restangular.extendModel('proposals', function(obj) {
return angular.extend(obj, {
profit: function() {
return this.revenue().minus(this.cost());
},
revenue: function() {
return this.price().
convertTo(this.internalCurrency);
},
cost: function() {
return this.recurringEngineering.cost().plus(
this.nonRecurringEngineering.cost()
);
}
...
});
});
return Restangular.all('proposals');
});
我的问题是:
如果我想检索特定的方案:/proposals/123
,我是否应该创建另一个工厂=>ProposalSvc
事实上,上面的这个特别返回Restangular.all
。。。,不能返回具有CCD_ 5的特定提议
你可以告诉我:"逻辑,因为ProposalsSvc
.中的"提案"末尾有一个"s"
我考虑了返回Restangular.service('proposals');
的方法。这将让更高层做出它需要的调用
然而,这意味着控制器必须依赖于Restangular的api,也就是实现细节。此外,如果我需要一些转换器,比如在结果中转换一些日期,这将取决于我的控制器。。。丑陋
我希望factory
在controller
意识到之前管理检索到的远程数据(一些转换等)。
在避免将所有逻辑放入controller
的同时,管理CRUD的好方法是什么
我应该创建一个中间层,另一个factory
,作为门面,向控制器隐藏实现吗?
您不必创建另一个工厂。对Restangular.all('proposals')
的调用返回一个具有get()方法的Collection。所以你应该能够做到这一点:ProposalsSvc.get(123)
。
或者,您可以返回一个有3个方法的服务:getList、one和post。然后可以执行ProposalsSvc.one().get(123)
。请注意,one()返回Element,而getList()返回Promise<array>
,因此服务的API是不一致的。我对简单的模型使用了Service,但为了更灵活,请使用Collection。
如果您不想将Restangular注入到控制器中以进行转换之类的操作,那么服务外观可能是个好主意。
- Javascript,访问一个主要对象模块模式中的每个对象
- 我应该如何从xml文件构建一个javascript页面
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 如何在DOM元素上按类型构建此函数
- 同位素库错误:未捕获错误无布局模式包装生产线8
- webpack开发模式和生产构建模式之间有什么区别
- Java 构建器模式可从 Rhino 中的 JavaScript 访问
- Ajax 构建关系按钮有效,用于显示引导模式的第二个按钮有效,但两者不能协同工作
- 使用引导程序 3 模式对话框构建查找数据
- 如何使用一行javascript构建器模式
- Angularjs模式窗口是动态(编程)构建的
- 构建丰富模式的良好实践
- 使用私有变量的Javascript构建器模式
- Phonegap构建android禁用home/power/softkeys (kiosk模式类型的应用程序)
- 我想动态地调用我的最小化的js文件,如果我的MVC 4应用程序构建触发器下的发布模式
- 构建HTML5/javascript平板应用的框架、设计模式和库
- 模型视图控制器-Javascript可以构建这种MVC模式或语法糖
- 我如何专业地构建我的模块模式Javascript项目
- 动态构建Twitter Bootstrap模式