后台应用逻辑的最佳解决方案?

The best solution for background application logic?

我有 2 种不同类型的组件。它们都只使用并包含一个 HTML5-canvas 元素,但需要在图表上显示不同类型的数据:

  1. 组件 A(只有其中的 1 个)
  2. 组件 B(其中 0 到 4 个)

两个组件都需要来自两个数据集的第一个数据条目的日期时间,但最后一个条目的日期时间来自它们各自的数据集。

组件 A 需要 组件 B 的第一个输入日期。

目前我是这样做的:

组件 B 具有从其自己的数据集中查找日期限制的方法。使用观察者模式和主题,我通过服务将返回的日期广播到组件 A 中。

问题在于耦合突然变得非常紧密。我不能先初始化组件 A,因为它需要 B 先进行计算。理想情况下,两个组件都应该同时初始化和 show/share 它们的数据,并继续这样做。 (例如,如果用户在一个图表中滚动,它也应该滚动所有其他组件,依此类推。)

这就是为什么我想在这些组件之上添加一个额外的层。一个控制器,如果你愿意的话。

不过我不知道什么是最好的:


我被吸引到创建另一个普通组件作为父组件,并让这个组件根据需要发送和接收数据 to/from 它的子组件(A 和 B)。

我也不确定什么是 "best practice" 以及您是否可以只使用像空 'logic shell' 这样的组件。我试过在这里和那里阅读,我发现了很多,但我似乎无法得到我的问题的确切答案。我需要时间才能理解所有这些知识并自己回答,所以我希望有人能给我一个帮助,谢谢。

PS:我应该补充一点,我的 angular 应用程序将成为较大应用程序中的子组件,并将从其他父组件获取数据。

你为什么不把你的逻辑放到服务中呢? 您还可以通过将子服务注入父服务来设置服务层次结构。

如果您的逻辑与UI/交互无关,您应该将其放入可重用服务中。如果你的逻辑是 UI 相关的,你可以设置一个父组件充当 A 和 B 之间的中介(作用于它们各自的 input/output 参数)

无论您做什么,最好将关注点分开。

  • A 和 B 都不需要关心需要其输出的其他组件。 Angular 有 Input/Output 个参数。

  • 不要将一些通用的日期时间计算内容放入组件中。通过服务使其可重用。

  • 通过引入接口和注入来保持松耦合。

更新:

服务应该只使用可注入的构造函数参数,因此您应该使用方法(或设置器,但表达能力较差)传递您的输入。 要传递任意 JSON 对象,您可以使用任何参数。但是,如果您的 json 遵循某种结构,您可以定义一个接口。

public doStuff(input: any): any { }

interface IMyDataContract {
    dateField: string;
}

public doStuff(input: IMyDataContract): any { }