首先,有我的博客上提供一点背景的这个问题:消息传递的插件框架
- http://www.codebork.com/coding/2008/06/25/message-passing-a-plug-framework.html
- http://www.codebork.com/coding/2008/07/31/message-passing-2.html
我知道,描述不是非常清楚,所以我会尽力总结我在这里尽力而为的尝试。该应用程序是一个个人财务计划。关于框架本身的进一步背景可以在这篇文章的末尾找到。
框架可以处理多种不同类型的插件(例如帐户,导出,报告等)。但是,我关注的是一个特定的插件类,即所谓的数据插件,因为这是导致我遇到问题的类。我有一类数据插件的账户,一个用于交易等
我中途已经给我留下了下面的架构数据插件广阔的再保:
- 数据插件对象(实现intialisation,安装和插入式元数据)[器具
IDataPlugin<FactoryType>
] - 的数据对象(例如,账户)[器具,例如,
IAccount
] - 甲工厂创建实例的数据对象[实现,例如,
IAccountFactory
]
此前数据对象和插件对象合并为一个,但这意味着必须为帐户中记录的每个事务实例化新的事务插件,这会导致一些问题。不幸的是,这种重新分解破坏了我的信息传递。数据对象实现了INotifyPropertyChanged
,所以我遇到了一个新问题,并且我不确定如何解决这个问题:插件对象正在向消息代理注册事件,但它实际上是数据对象事件。这意味着订阅插件目前必须订阅每个创建的帐户,交易等!这显然不可扩展。
至于我当时可以告诉我有两个可能的解决方案:
- 使数据插件对象的穿针引线的数据对象和消息代理,可能分批更改通知。我不喜欢这样,因为它给消息传递系统增加了另一层复杂性,我觉得我应该可以不做。
- 垃圾当前基于事件的实现并使用其他更容易管理的内存(内存中的WCF ?!)。
所以我想我真的问:
- 你会如何解决这个问题?
- 您认为我忽视了哪些潜在解决方案?
- 我的方法甚至隐约地在轨道上/明智的?!:-)
从博客文章的日期可以看出,这个问题的一些变体现在已经征税了相当长的一段时间!因此,任何和所有的答复将不胜感激。
的背景框架本身如下:
我的插件框架由三个主要部分组成:一个插件经纪人,一个偏好管理器和消息代理。插件代理执行面包和黄油插件:发现和创建插件。偏好管理器管理框架和各个插件的用户偏好,例如启用了哪些插件,数据应该保存在哪里等。通信是通过发布/订阅,消息代理坐在中间,收集所有发布的消息类型和管理订阅。发布/订阅目前通过.NET
INotifyPropertyChanged
界面实现,该界面提供了一个名为PropertyChanged
的事件;消息代理构建了一个实现INotifyPropertyChanged
的所有插件的列表,并订阅其他插件此事件。消息传递的目的是允许帐户和事务插件通知存储插件数据已更改,以便可以保存它。