后台应用逻辑的最佳解决方案?
The best solution for background application logic?
我有 2 种不同类型的组件。它们都只使用并包含一个 HTML5-canvas 元素,但需要在图表上显示不同类型的数据:
- 组件 A(只有其中的 1 个)
- 组件 B(其中 0 到 4 个)
两个组件都需要来自两个数据集的第一个数据条目的日期时间,但最后一个条目的日期时间来自它们各自的数据集。
组件 A 需要 组件 B 的第一个输入日期。
目前我是这样做的:
组件 B 具有从其自己的数据集中查找日期限制的方法。使用观察者模式和主题,我通过服务将返回的日期广播到组件 A 中。
问题在于耦合突然变得非常紧密。我不能先初始化组件 A,因为它需要 B 先进行计算。理想情况下,两个组件都应该同时初始化和 show/share 它们的数据,并继续这样做。 (例如,如果用户在一个图表中滚动,它也应该滚动所有其他组件,依此类推。)
这就是为什么我想在这些组件之上添加一个额外的层。一个控制器,如果你愿意的话。
不过我不知道什么是最好的:
- 可以将外部数据作为输入的共享服务?
- 容器组件? (包含)
另一个组件,组件 C,A 和 B 是其子组件?
由于我对 Angular 2 还是个新手,所以很难说哪种方法最适合未来 maintenance/development?
我被吸引到创建另一个普通组件作为父组件,并让这个组件根据需要发送和接收数据 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 { }
我有 2 种不同类型的组件。它们都只使用并包含一个 HTML5-canvas 元素,但需要在图表上显示不同类型的数据:
- 组件 A(只有其中的 1 个)
- 组件 B(其中 0 到 4 个)
两个组件都需要来自两个数据集的第一个数据条目的日期时间,但最后一个条目的日期时间来自它们各自的数据集。
组件 A 需要 组件 B 的第一个输入日期。
目前我是这样做的:
组件 B 具有从其自己的数据集中查找日期限制的方法。使用观察者模式和主题,我通过服务将返回的日期广播到组件 A 中。
问题在于耦合突然变得非常紧密。我不能先初始化组件 A,因为它需要 B 先进行计算。理想情况下,两个组件都应该同时初始化和 show/share 它们的数据,并继续这样做。 (例如,如果用户在一个图表中滚动,它也应该滚动所有其他组件,依此类推。)
这就是为什么我想在这些组件之上添加一个额外的层。一个控制器,如果你愿意的话。
不过我不知道什么是最好的:
- 可以将外部数据作为输入的共享服务?
- 容器组件? (包含)
另一个组件,组件 C,A 和 B 是其子组件?
由于我对 Angular 2 还是个新手,所以很难说哪种方法最适合未来 maintenance/development?
我被吸引到创建另一个普通组件作为父组件,并让这个组件根据需要发送和接收数据 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 { }