gpt4 book ai didi

c# - 插件框架中的消息传递

转载 作者:行者123 更新时间:2023-11-30 19:52:18 25 4
gpt4 key购买 nike

首先,我的博客上提供了有关此问题的一些背景信息:

我知道描述不是很清楚,所以我会尽量总结一下我在这里所做的尝试。该应用程序是一个个人理财程序。有关框架本身的更多背景信息,请参阅本文末尾。

框架可以处理许多不同类型的插件(例如,帐户、导出、报告等)。但是,我专注于一类特定的插件,即所谓的数据插件,因为正是这一类给我带来了问题。我有一类用于帐户的数据插件,一类用于交易等。

我正在进行大规模的重构,它给我留下了以下数据插件架构:

  • 数据插件对象(实现初始化、安装和插件元数据)[实现IDataPlugin<FactoryType> ]
  • 数据对象(例如帐户)[实现,例如 IAccount ]
  • 创建数据对象实例的工厂[实现,例如IAccountFactory ]

之前数据对象和插件对象是合二为一的,但是这就意味着需要为账户中记录的每笔交易实例化一个新的交易插件,这会带来一些问题。不幸的是,重构破坏了我的消息传递。数据对象实现 INotifyPropertyChanged ,所以我遇到了一个新问题,一个我不确定如何解决的问题:插件对象正在向消息代理注册事件,但实际上触发事件的是数据对象。这意味着订阅插件目前必须订阅每个创建的账户、交易等!这显然是不可扩展的。

据我所知,目前我有两种可能的解决方案:

  1. 使数据插件对象成为数据对象和消息代理的中间人,可能会批处理更改通知。我不喜欢这样,因为它给消息传递系统增加了另一层复杂性,我觉得我应该能够没有它。
  2. 放弃当前基于事件的实现并使用其他更易于管理的东西(内存中 WCF?!)。

所以我想我真的在问:

  1. 你会如何解决这个问题?
  2. 您认为我忽略了哪些潜在的解决方案?
  3. 我的方法是否符合轨道/明智?! :-)

从博客文章的日期可以看出,这个问题的某些变体已经困扰我很长时间了!因此,我们将不胜感激任何和所有回复。

框架本身的背景如下:

My plug-in framework consists of three main components: a plug-in broker, a preferences manager and a message broker. The plug-in broker does the bread-and-butter plug-in stuff: discovering and creating plug-ins. The preferences manager manages user preferences for the framework and individual plug-ins, such as which plug-ins are enabled, where data should be saved, etc. Communication is via publish/subscribe, with the message broker sitting in the middle, gathering all published message types and managing subscriptions. The publish/subscribe is currently implemented via the .NET INotifyPropertyChanged interface, which provides one event called PropertyChanged; the message broker builds a list of all plug-ins implementing INotifyPropertyChanged and subscribes other plug-ins this event. The purpose of the message passing is to allow the account and transaction plug-ins to notify the storage plug-ins that data has changed so that it may be saved.

最佳答案

哇!大问题! :)

如果我错了请纠正我。您现在的基本解决方案是一种观察者模式,其中数据对象(帐户等)通知其状态发生变化。您认为问题在于订阅插件必须在每个对象中注册才能处理通知。

这本身不是问题,您可以将事件控件放在Domain Model 中。 , 但我建议你创建一个 Service Layer并在这一层做这个事件通知。这样一来,只有一个对象负责发布通知。

Martin Fowler 在他的博客中有一系列事件模式。 Check it out !很好的阅读。

关于c# - 插件框架中的消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com