Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns “的名称”;“通知和检查”;公共子架构?_Design Patterns_Architecture_Publish Subscribe_Distributed System_Event Driven Design - Fatal编程技术网

Design patterns “的名称”;“通知和检查”;公共子架构?

Design patterns “的名称”;“通知和检查”;公共子架构?,design-patterns,architecture,publish-subscribe,distributed-system,event-driven-design,Design Patterns,Architecture,Publish Subscribe,Distributed System,Event Driven Design,基本子架构问题。在高层次上,在设计pubsub时,我有时会在两种体系结构之间进行选择: 发布突变或“新状态” 一些数据库状态发生了变化,发布者通过pubsub通知该变化。但它们在消息中包含了足够的信息,因此订阅者不需要在数据库上进行查找。假设订户有一个数据库缓存。它可以接收突变或新状态,并在不进行查找的情况下更新其缓存。 通知和检查 发布者只会通知“有新的更改”,这会提示订阅者从数据库中提取最新的更改。这在IMO中更为稳健。pubsub可能无法保证交付顺序,并且这种体系结构对此很稳健,而#1则

基本子架构问题。在高层次上,在设计pubsub时,我有时会在两种体系结构之间进行选择:

  • 发布突变或“新状态”
  • 一些数据库状态发生了变化,发布者通过pubsub通知该变化。但它们在消息中包含了足够的信息,因此订阅者不需要在数据库上进行查找。假设订户有一个数据库缓存。它可以接收突变或新状态,并在不进行查找的情况下更新其缓存。

  • 通知和检查 发布者只会通知“有新的更改”,这会提示订阅者从数据库中提取最新的更改。这在IMO中更为稳健。pubsub可能无法保证交付顺序,并且这种体系结构对此很稳健,而#1则不然,如果突变对顺序敏感

  • 我的问题是,这两种架构是否有一个共同的名称?谢谢

    发布/订阅在《四人帮设计模式》一书中被称为观察者模式。在第298页,他们将这两种变体描述为推拉模型

    观察者模式的实现通常会让主题广播有关更改的附加信息。主题将此信息作为参数传递以进行更新。信息量可能差异很大

    在一个极端,我们称之为“推送模式”(push model),受试者向观察者发送有关变化的详细信息,不管他们是否愿意。另一个极端是拉模型;受试者只发送最少量的通知,观察者随后明确询问细节

    拉动模型强调受试者对其观察者的无知,而推动模型则假设受试者对其观察者的需求有所了解。推送模型可能会降低观察者的可重用性,因为主题类对观察者类做出的假设可能并不总是正确的。另一方面,拉动模型可能效率低下,因为观察者类必须在没有主体帮助的情况下确定发生了什么变化


    发布/订阅在《四人帮设计模式》一书中被称为观察者模式。在第298页,他们将这两种变体描述为推拉模型

    观察者模式的实现通常会让主题广播有关更改的附加信息。主题将此信息作为参数传递以进行更新。信息量可能差异很大

    在一个极端,我们称之为“推送模式”(push model),受试者向观察者发送有关变化的详细信息,不管他们是否愿意。另一个极端是拉模型;受试者只发送最少量的通知,观察者随后明确询问细节

    拉动模型强调受试者对其观察者的无知,而推动模型则假设受试者对其观察者的需求有所了解。推送模型可能会降低观察者的可重用性,因为主题类对观察者类做出的假设可能并不总是正确的。另一方面,拉动模型可能效率低下,因为观察者类必须在没有主体帮助的情况下确定发生了什么变化

    我不同意#2更健壮:你需要重播所有之前的事件以达到最终状态,而不仅仅是最新的事件;当收件人轮询以获取有关事件的数据时,数据可能已过时。不是说#1更好,只是说每个人都有优点和缺点,如果在你目前的情况下两者都会更好,通常是一个,但不一定是你所有的情况。我不同意#2更强大:你需要重播所有之前的事件以达到最终状态,而不仅仅是最新的事件;当收件人轮询以获取有关事件的数据时,数据可能已过时。不是说#1更好,只是说每个人都有优点和缺点,如果在你目前的情况下两者都会更好,通常是一个,但不一定是你所有的情况。