这里给出一些store的建议,同样它们对架构没有任何影响,读者可以自行斟酌是否采用。

以实体为颗粒度

store以实体为颗粒度,一个领域下可包含n个store。

store应该无逻辑,只是简单的增删改查。

在本架构下,业务逻辑在领域层,编排和时序控制在应用层,因此store无需包含复杂逻辑,只是简单的增删改查即可,这也有助于隔离具体技术栈。store充当前端的数据库,而不是redux一样的业务和数据的综合体。

store应该范式化

这是一个redux社区的通用做法,把数组转换成以id为ey的对象,好处是增删改查 都比较方便,直接通过key获取,不用find,性能也更高。不过现在js有了Map类型,建议用Map,因为object限定key必须为字符串,而id大多都是数字,而且object没有删除元素的最佳做法(设为undefined和delete有自身的问题)。

  1. import { Todo } from 'todo/models/todo'
  2. import { Store } from 'todo/app/port'
  3. export default <Store>{
  4. todos: new Map(),
  5. add(todo: Todo) {
  6. this.todos.set(todo.id, todo)
  7. },
  8. del(id: number) {
  9. this.todos.delete(id)
  10. },
  11. set(todo: Todo) {
  12. this.todos.set(todo.id, todo)
  13. }
  14. }