javascript - Angular.js 和 DAO 模式

标签 javascript activerecord angularjs dao

首先,我必须承认我对 Angular.js 很陌生,之前我没有使用过任何新一代 js 框架,如 Backbone 或 Knockout。我正在创建一个使用 RESTful API 与服务器通信的应用程序。我深入研究了 Angular 文档和博客笔记,以便我能做对。

我找到的例子主要是 $resource .它看起来很不错:许多内置方法,当您正确设计 REST 接口(interface)时,您甚至不必再编写任何东西。

但我(以及我的整个团队)更习惯于 JavaEE 思考模型层的方式:轻量级模型类(POJO 等)、持久化和获取模型的 DAO 类以及 DAO 和 Controller 之间可选的服务层。另一方面,在 Angular 中,$resource 创建了一些更类似于事件记录的东西。

我已经想出了两种在 Angular 中实现 DAO 模式的方法:

  1. 从头开始编写所有内容,一直到 $http 抽象级别。我会将每个 DAO 方法实现为 $http 调用,注意错误。
  2. 通常像轻量级模型类一样使用 $resource 对象,并将它们传递给 DAO,DAO 是唯一负责对它们调用 .$save() 等操作的单元。当然,我们不能避免在不同的地方调用它,但具有这种约定的解决方案对我来说已经足够了。

第二种方法对我来说更好,因为它重用了现有代码。 $resource 具有良好的 promise 对象行为,如果我不必自己实现它,我会很高兴。

所以最后的主要问题是:事件记录方法是在 Angular、Backbone 和其他类似工具中进行数据访问的唯一方法吗?也许有人已经尝试在他的代码中加入更类似于 DAO 的类似解决方案,并且可以分享他对此的想法?

第二个问题:在处理错误、连接丢失和其他问题时,$resource 对象是否足够?考虑到这一点是否值得使用 $resource 还是从较低级别的 $http 开始更好。

我在项目的初期,我知道这个决定很可能会影响后面的整个项目生命,所以我想选择最好的。

最佳答案

我完全同意。这是我的做法:

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;
});

然后您可以在需要的地方注入(inject) 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) {
            ...
        });
    };
});

关于javascript - Angular.js 和 DAO 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218271/

相关文章:

javascript - 更改先前单击的元素的颜色

javascript - 使用 RSelenium 和 rvest 抓取动态 Javascript 页面

ruby-on-rails - rails : adding additional methods to a model for cache retrieval

ruby-on-rails - Rails 限定工资期

json - 如何在 Angular js中的json中访问具有特殊字符的json数据

javascript - 如何解决打开和关闭 div Bootstrap 问题?

ruby-on-rails - 如何设置多层 Rails ActiveRecord 多对多关系?

javascript - 如何通过工厂请求传递参数

angularjs - 如何从 Angular Controller 或模块控制 toastr 选项(或全局设置)

javascript - 创建元素后滚动到页面底部