Javascript 大型AngularJS应用程序设计

Javascript 大型AngularJS应用程序设计,javascript,angularjs,Javascript,Angularjs,我需要建议如何设计一个包含多个复杂模块的AngularJS应用程序,并根据用户角色在验证和授权后加载模块。有些用户可以访问一个简单的模块,有些用户可以访问仪表板,有些用户可以访问2个以上的模块 我们已经确定了许多可以跨不同模块重用的指令。在设计阶段,我们已经确定了以下应该存在的问题,并对以下一些问题给出了答案,但我们仍然需要专家的建议: 一个模块可能有 分部 控制器 指示 服务 异常处理(HTTP状态代码或业务错误) 记录(带行号,从哪个函数开始) 可能还需要将记录的信息保存到服务器中 应

我需要建议如何设计一个包含多个复杂模块的AngularJS应用程序,并根据用户角色在验证和授权后加载模块。有些用户可以访问一个简单的模块,有些用户可以访问仪表板,有些用户可以访问2个以上的模块

我们已经确定了许多可以跨不同模块重用的指令。在设计阶段,我们已经确定了以下应该存在的问题,并对以下一些问题给出了答案,但我们仍然需要专家的建议:

  • 一个模块可能有
    • 分部
    • 控制器
    • 指示
    • 服务
  • 异常处理(HTTP状态代码或业务错误)
  • 记录(带行号,从哪个函数开始)
  • 可能还需要将记录的信息保存到服务器中
  • 应该能够打开和关闭日志记录
  • 通过factory类定制小部件(在其他模块中重用)
  • 共享指令(隔离作用域)
  • 共享模块
  • 共享实用程序(排序、筛选等)
  • 根据主数据的枚举数
  • 单态常数
  • 认证(CSRF)
  • 离线存储
  • 休息服务
  • 事件处理,用于从一个模块进行调度并在另一个模块中进行处理
应用程序的UI看起来像是页面顶部的一个固定菜单栏,左上角有一个下拉导航,根据用户的角色有多个链接。当用户单击链接时,相应的模块应加载到页面中。必须有一个空项目,手动引导并在运行时加载其他模块

我们的方法是采用以下文件夹结构:

  • 应用程序
    • 资产
      • css
      • lib-js
      • 图像
    • 公共组件
      • 指令
      • 公用事业
      • 认证
      • 用于保存$resource调用的服务代理
      • 列举
      • 常数
    • 模型
      • 实体json(例如客户、产品等)
    • 业务单元A
      • 分部
      • 指令
      • 服务
      • 控制器
    • 业务单元B
    • 商务单元C
    • index.html
    • Requirejs配置文件
因此,我的问题是:

  • 模块内的服务如何与其他模块通信
  • 模块是否应独立开发和运行
  • 如何通过传输数据处理模块之间的通信
  • 如何集成上述所有元素,特别是异常处理、日志记录
  • 开发人员应该理解我们定义的约定吗
  • 调用什么方法进行日志记录,在模块之间发送信息
我建议在您的工作流程中加入生成器,并为您的项目使用生成器,这将使您构建应用程序的方式更加简单,特别是在团队中工作时

今年早些时候,angular的人发布了一个关于你的应用程序结构的最佳实践,我建议你阅读它,据说有一个基于这些最佳实践的生成器,我完全推荐它

我将引用cg angular网站:

所有子生成器都会提示用户指定保存新文件的位置 文件夹。因此,您可以创建所需的任何目录结构, 包括筑巢。生成器将在中创建少量文件 项目的根目录,包括index.html、app.js和app.less。你 确定项目其余部分的结构

关于您的问题:

  • 模块内的服务如何与其他模块通信
您可以为要执行的指令/和服务/创建文件夹 在不同的模块中重用

  • 模块是否应独立开发和运行
你可以在一个应用程序中有几个模块(你可以将它们作为 需要,可能使用require js,但这不是主题)

  • 如何通过传输数据处理模块之间的通信
使用服务在不同的控制器之间传递信息 模块

  • 如何集成上述所有元素,特别是异常处理、日志记录
您可以为其执行通用错误处理程序和通用http侦听器 所有模块

  • 开发人员应该理解我们定义的约定吗
使用发电机,他们有意见,并给出命令和 团队需要的惯例

大型AngularJS和JavaScript应用程序中的代码组织

许多开发人员都在为如何组织应用程序的代码而挣扎 一旦它变大了,它就会变小。我最近在AngularJS和 JavaScript应用程序,但从历史上看,这是一个跨领域的问题 所有技术,包括我在中开发的许多Java和Flex应用程序 过去

总的趋势是沉迷于按类型组织事物。信息技术 与人们组织工作的方式极为相似 衣服

地板上的桩

让我们来看看angular seed,它是 AngularJS应用程序。“应用程序”目录包含以下结构:

css/img/js/app.js controllers.js directions.js filters.js services.js lib/partials/JavaScript目录中有一个用于 我们写的每一种东西。这很像是组织你的工作 把衣服堆在地板上。你有一堆袜子, 内衣、衬衫、裤子等。你知道你的黑色羊毛袜子在里面 那堆东西在角落里,但要挖起来还需要一段时间 出去

这真是一团糟。人们不应该这样生活,开发者也不应该这样 不应该这样编码。一旦你超过一半