我想要有几个小型的子系统(DLL和EXE),主要是彼此独立的.有一些程序集将被所有EXE使用.这些程序集几乎都使用相同的数据库.而不是使用界面来进行这些程序集之间的通信,Blackboard类型模式不会提供更多的独立性?
我在想一些通过事件通知的调解器类型的构造,所有的子系统通信都通过它.这使得syb系统非常独立.调解员将持有应广播的所有通知的名称.然后,用户将以名称来听特定的事件,但总是订阅相同的(或者可能通过名称作为参数)mediator事件.
这里有更多的讨论:http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22829492.html
解决方法
随着短语成为句子,可以采取更大的观点,并且可以解决同音词(对,对)的各种选项.所有这一切都是通过将黑板打开到所有进程来完成的,并且“锁”仅在各种结果滚动时被应用.
使用数据库作为您的黑板有一定的意义,因为您获得免费的交易,但这取决于数据的更新和重新读取的积极性.如果发生很快,往返行程会相加,使内存结构更加合理.
您的调解者的想法是有道理的,因为它创建了一个单一的锁点,而黑板算法很少遇到A-&B; B> A风格的死锁,因为他们要求所有的数据元素在前面.除此之外,放弃锁定不是一个很大的惩罚,因为各种子任务将随着数据滚动而重新启动.当他们拥有的数据已经过时时,需要通知董事会的订阅者,这可以通过使用最新数据重新启动任务的回调来完成.
就工作流的评论而言:这里的主要区别在于,大多数工作流由主进程进行协调,该进程采用刚刚输入的状态,并决定哪些状态可用于数据移动.虽然可能有独立的演员,但他们很少通过创造更好的结果(其他任务将使用)相互参与“超越”.换句话说,一个工作流通常是一组数据非常有限的数据,而黑板几乎是一个独立的活动的空闲. (也就是说,黑板可能在你的工作流程之后:http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-247/FORUM_15.pdf)
我不能想到我看到的模式的任何C#示例,我做的工作类型没有太多的调用(计算是确定性的).做一些搜索查找其他语言的参考,但没有一个看起来很好的.