Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合2.0:我应该将业务逻辑放在哪里?_Javascript_Design Patterns_Polymer 2.x - Fatal编程技术网

Javascript 聚合2.0:我应该将业务逻辑放在哪里?

Javascript 聚合2.0:我应该将业务逻辑放在哪里?,javascript,design-patterns,polymer-2.x,Javascript,Design Patterns,Polymer 2.x,我从聚合物2.0开始,我有一个设计问题,我找不到答案,希望你们能帮助我 关键是我正在开发一个任务管理器系统,它使用一个外部api(本例中为laravel)来启动/停止任务、编辑或创建一个新任务,等等 我找不到处理业务特定逻辑的最佳方法,因为据我所知,聚合元素应该是可重用的,在聚合元素中包含api调用和其他功能似乎不是最好的解决方案,尽管这是最简单的 我有几种选择: 使用顶级JS类中的自定义事件管理所有内容,该类调用api并更新聚合元素 使用mixin从Polymer元素和包含所需方法/逻辑的自

我从聚合物2.0开始,我有一个设计问题,我找不到答案,希望你们能帮助我

关键是我正在开发一个任务管理器系统,它使用一个外部api(本例中为laravel)来启动/停止任务、编辑或创建一个新任务,等等

我找不到处理业务特定逻辑的最佳方法,因为据我所知,聚合元素应该是可重用的,在聚合元素中包含api调用和其他功能似乎不是最好的解决方案,尽管这是最简单的

我有几种选择:

  • 使用顶级JS类中的自定义事件管理所有内容,该类调用api并更新聚合元素
  • 使用mixin从Polymer元素和包含所需方法/逻辑的自定义任务类进行扩展
  • 将任务对象传递给聚合元素,并将其另存为属性,然后通过它调用该方法
谁能告诉我哪种方法最好?尽管我确信这不会是我说的三个选项中的任何一个:)


谢谢大家!

有几种方法

1)使用标签读取和修改数据(实时数据库)

//firebase示例
您可以使用它访问{{data}}并修改它。因此,如果删除笔记,它将在服务器上和每一个其他连接的客户端上自动删除(这是一项类似firebase的live db功能) =>见

据我所知,您将使用php为数据创建api,对吗?因此,一个实时数据库是不可能的。所以

2)使用标签读取(和修改)数据

最好的办法可能是为你需要的东西创建一个数据提供者 e、 g


因此,您仍然可以轻松访问{{notes}}和{{comments}}

您处理更新的方式取决于您的用例。例如,您可以在数据处理程序中使用changeEvents,通过fetch或iron ajax动态地进行api更新

或者,您可以使用表单执行“普通”post请求,并触发数据提供程序获取新数据

我个人喜欢完全封装我的数据,所以我不必考虑它。例如,数据是如何以及从何而来的我不在乎:p

数据源示例:

  • 静态:组件本身内部的json =>
  • 子元素:例如,使用iron ajax从json api实际加载数据
  • fetch:使用fetch加载数据、处理数据并存储数据以供使用
  • 浏览器存储:使用html5本地存储或indexedDB(可能用于临时数据?)=>
3)使用Redux之类的工具(用于大量动态数据)

但请记住,它增加了一个你必须考虑的“额外”层

我应该什么时候使用Redux

通常,当您有合理数量的数据时,请使用Redux 随着时间的推移,你需要一个单一的真相来源,你会发现 这就像是把所有的事情都保持在一个顶层 组件的状态不再足够

更多=>

聚合物的一个简单示例:

// firebase example
<firebase-query
    id="query"
    app-name="notes"
    path="/notes/[[uid]]"
    data="{{data}}">
</firebase-query>

<template is="dom-repeat" items="{{data}}" as="note">
  <sticky-note note-data="{{note}}"></sticky-note>
</template>
<data-notes notes="{{notes}}"></notes>
<data-comments comments="{{comments}}" for="[[currentNote]]"></notes>