3

我正在编写一个单页应用程序,并已为客户端编写数据访问层。我的问题涉及它的正确设计。虽然我确实理解 JS 是以回调为中心的,但我不得不怀疑是否没有更好的方法来进行数据检索。以下是我当前的数据访问调用如何使用回调格式化的示例:

$interface.getDashboard = function (callback) {
    callback({MyApplications:[]});
};

以下是我正在考虑消除各地回调的需要:

$interface.getApplications = function () {
    var v = amplify.store("api.applications");
    if (!v) {
        v = [];
        _get("/api/applications", null, function (results) {
            amplify.store("api.applications", results, { expires: _cacheTimeOut });
            dataRefresh();
        });
    }

    return v;
};

在上面的代码中,dataRefresh()将告诉所有适用的订阅者刷新他们的数据。所以我想你可以说它仍在使用回调,但以不同的方式。

有一个更好的方法吗?我以前从未为 javascript 编写过强大的数据访问层,并且想知道是否有一种模式可以作为约定或启发式解决方案遵循?

4

1 回答 1

2

我目前正在处理关于如何设计和构建我正在开发的新企业级应用程序的 Javascript 端的相同问题。

许多 SPA 示例/模板(例如 HotTowel)非常适合向您展示如何开始使用 SPA,但在大规模实施方面并没有提供太多帮助。

Nicholas Zakas 的这次演讲提出了一个很好的解决方案。演讲的幻灯片可以在这里找到。

总而言之,您的客户端层应包括:

  1. 一组模块 - 这些模块为您的应用程序提供离散的功能单元。它们应该完全相互独立,并且只知道沙盒。

  2. 沙箱 - 这为模块提供了一致的外观接口,并充当模块和应用程序核心之间的控制器。

  3. 应用程序核心 - 这是负责模块管理、相互通信和您的应用程序所需的任何其他核心功能(例如 ajax 请求)的中介。只有应用程序核心应该知道您正在使用的基础库。

  4. 基础库——这些库提供浏览器规范化和任何其他通用功能,例如 DOM 操作。

链接扩展了此设计并提供了更多详细信息。

我知道这个答案并没有专门针对您的数据访问层,但作为更一般的架构概述,您可能可以将这些概念应用于您的特定场景。

编辑:

AuraJS是由 Addy Osmani 开发的 Zakas 概述的理论的具体实现。它目前处于开发者预览阶段,但它看起来是一个很好的创意起点。

于 2013-03-27T15:10:03.830 回答