如何对应用程序建模并具有多线程需求与封装协调一致
||
可以说,例如,我有一个小部件订购应用程序。它允许客户从小部件目录中订购。显而易见的对象选择可能是\'Catalog \'和\'Orders \'。 \“ Catalog \”对象将允许我浏览,添加和删除小部件。 \'Orders \'对象将允许我创建和更新订单。
它们都是多线程安全的,并且在内部处理对象锁定和数据库事务。它们被很好地封装/分隔-直到提出要求,要求从目录中删除窗口小部件之前,必须从现有订单中删除包含该窗口小部件的行项目。
处理这种情况的一种常见方法是使用观察者模式。换句话说,当零件被删除时,会从“目录”中引发一个事件。然后,调解员处理此事件,并告诉\'Orders \'使用该小部件删除订单项。
优点:保留封装,松散耦合。
缺点:零件的移除和订单的更新不是单个的原子操作吗?这项技术将违反该规定。换句话说,如果在处理事件时发生错误,则可以在不更新任何订单的情况下删除零件。
我赞成缺点。但是,这仅意味着需要另一个对象-一个聚合\'Catalog \'和\'Orders \'的对象,并使两个操作都自动执行。问题是每个对象都执行对象锁定和数据库事务处理,而我都看不到如何干净地提取它们–即,从技术上讲,新对象现在应该处理该责任,因为您不能锁定对象并执行两次事务并且仍然具有原子操作。
有什么想法吗?这是我以前从未见过的经典问题吗?我一直走在春天的路上,但我认为AOP在这里无法做任何事情。
谢谢。
没有找到相关结果
已邀请:
1 个回复
谷起