Javascript js和DAO模式
首先,我必须承认我对Angular.js非常陌生,而且我以前从未使用过任何新一代js框架,比如主干框架或淘汰框架。我正在创建一个使用RESTfulAPI与服务器通信的应用程序。我在angular文档和博客笔记中挖掘了很多东西,以便我能正确地完成它 我找到的例子大部分都是关于。它看起来相当不错:许多内置方法,当您正确设计REST接口时,您甚至不需要再编写任何东西 但我(以及我的整个团队)更习惯于JavaEE对模型层的思考方式:轻量级模型类(POJO等)、持久化和获取模型的DAO类,以及DAO和控制器之间的可选服务层。另一方面,在Angular$resource中创建了更类似于活动记录的内容 我已经提出了两种在Angular中实现DAO模式的方法:Javascript js和DAO模式,javascript,activerecord,angularjs,dao,Javascript,Activerecord,Angularjs,Dao,首先,我必须承认我对Angular.js非常陌生,而且我以前从未使用过任何新一代js框架,比如主干框架或淘汰框架。我正在创建一个使用RESTfulAPI与服务器通信的应用程序。我在angular文档和博客笔记中挖掘了很多东西,以便我能正确地完成它 我找到的例子大部分都是关于。它看起来相当不错:许多内置方法,当您正确设计REST接口时,您甚至不需要再编写任何东西 但我(以及我的整个团队)更习惯于JavaEE对模型层的思考方式:轻量级模型类(POJO等)、持久化和获取模型的DAO类,以及DAO和控制
我正处于项目的开始阶段,我知道这个决定很可能会影响到以后整个项目的生命周期,所以我想选择最好的。我完全同意。我是这样做的:
bankApp.factory("CustomerRepository", function ($resource) {
var customerRepository = $resource("rest/customers/:id", {id:'@id'}, {'update': {method:'PUT'}});
// You can also add addition repository like $http calls onto the
// customerRepository like getting the count and other stuff.
return customerRepository;
});
然后,您可以在任何需要的地方注入CustomerRepository。例如:
bankApp.controller("BankController", function ($scope, CustomerRepository) {
$scope.customers = CustomerRepository.query();
$scope.createCustomer = function () {
CustomerRepository.save($scope.customer, function (customer) {
...
});
};
...
$scope.saveCustomer = function () {
CustomerRepository.update($scope.customer, function (customer) {
...
});
};
});
使用angular Service公开您的资源并不是说您在这里实际获得了一些东西。您刚刚公开了重命名为“repository”的资源,并添加了“update”方法。您仍然没有丰富的域模型对象,也没有比调用customer.$save()/customer.$update()@zappan更大的好处。也许我遗漏了什么,得到的是您不必重复“$resource”(“rest/customers/:id”,{id:'@id'},{update':{method:'PUT'}”);”无论在哪里,你都想用这些资源做点什么。如果愿意,请将名称从CustomerRepository更改为CustomerResource,重点是将$resource的创建保持在一个位置。您缺少的是,这不是DAO模式,这意味着模型(如果愿意,可以使用富域模型)和DAO(数据访问对象)之间的关注点分离它负责模型的持久存储。最初的问题是关于DAO模式的,这不是$resource的全部内容。我想说的是,通过将$resource包装在一个角度服务中,并将其视为一个存储库,您可以获得DAO模式带来的一些优势。想象一下对服务器的restful调用,您在那里对资源执行GET、POST、PUT和DELETE操作。类似于在服务器端执行的CRUD操作。然后,您可以将js对象视为富域模型,而不是从js对象执行rest调用(例如myDAO.get而不是myObj.get())。