Bun*_*ori 38 oop design-patterns observer-pattern
当我从头开始设计我的系统时,我经常面临一个两难的境地:我的对象是否应该将信息推送到另一个对象中,或者对象是否应该从另一个对象中提取必要的数据.
在OOP设计中是否有类似标准的东西,我更喜欢按对象的数据拉动,而不是数据推入对象?
任何人都可以提出建议吗,从长期角度来看,或者当OOP结构/框架/图表变得更复杂时,一种方法是否优于另一种方法?
N_A*_*N_A 20
正如其他答案所述,推或拉都不是更好,而是你应该选择最适合你设计需求的那种.
从这里讨论观察者模型是基于推拉还是拉动:
谁触发更新?
主体及其观察者之间的通信是通过观察者界面中声明的notify方法完成的.但它可以从主题或观察者对象触发.通常,当状态发生变化时,主体会触发notify方法.但有时当更新频繁时,主题的连续变化将决定观察者中的许多不必要的刷新操作.为了使该过程更有效,观察者可以在认为必要时负责启动通知操作.
对于这种模式,确定特征是数据改变的频率,然后是观察者希望接收该数据的相应速率.如果观察者希望数据的速度低于主体产生的数据(例如手机上的GPS,你不需要你的位置,只有当你有特定的使用时),然后轮询是更高效.如果观察者想要数据的速度与主体能够产生的速度一样快(可能的例子是实时股票报价应用程序),那么推送通知可能会更好.
ral*_*aul 20
我认为这里的讨论有点遗漏了关于拉动和推动的关键点,它被困在个别的例子和案例上.
推送:推送的优势在于您了解自己的数据并且知道自己在推动什么.没有任何组件比拥有数据的组件更了解(或不应该知道)数据,理论上这意味着更好的设计和更强大的系统.
拉动:我在拉动方法中看到的唯一优势是拉动的组件确切知道何时应该拉动.它可以在需要数据时启动对话,并且没有组件知道(或不应该知道)何时需要数据而不是需要数据的组件.
我的结论是:无论组件拥有什么交易,它都会启动交易.如果您要从API检索数据,显然API客户端将拥有该事务,因此将进行拉动.如果您正在广播消息而不是广播公司拥有该交易,那么它就会推送.
| 归档时间: |
|
| 查看次数: |
23704 次 |
| 最近记录: |