如何对应用程序建模并具有多线程需求与封装协调一致

|| 可以说,例如,我有一个小部件订购应用程序。它允许客户从小部件目录中订购。显而易见的对象选择可能是\'Catalog \'和\'Orders \'。 \“ Catalog \”对象将允许我浏览,添加和删除小部件。 \'Orders \'对象将允许我创建和更新订单。 它们都是多线程安全的,并且在内部处理对象锁定和数据库事务。它们被很好地封装/分隔-直到提出要求,要求从目录中删除窗口小部件之前,必须从现有订单中删除包含该窗口小部件的行项目。 处理这种情况的一种常见方法是使用观察者模式。换句话说,当零件被删除时,会从“目录”中引发一个事件。然后,调解员处理此事件,并告诉\'Orders \'使用该小部件删除订单项。 优点:保留封装,松散耦合。 缺点:零件的移除和订单的更新不是单个的原子操作吗?这项技术将违反该规定。换句话说,如果在处理事件时发生错误,则可以在不更新任何订单的情况下删除零件。 我赞成缺点。但是,这仅意味着需要另一个对象-一个聚合\'Catalog \'和\'Orders \'的对象,并使两个操作都自动执行。问题是每个对象都执行对象锁定和数据库事务处理,而我都看不到如何干净地提取它们–即,从技术上讲,新对象现在应该处理该责任,因为您不能锁定对象并执行两次事务并且仍然具有原子操作。 有什么想法吗?这是我以前从未见过的经典问题吗?我一直走在春天的路上,但我认为AOP在这里无法做任何事情。 谢谢。     
已邀请:
这是一个链接,描述了如何在GORM下针对不同类型的关系处理/级联删除和更新。您描述的设置似乎可以建模为几个1:m或m:n关系。对于“级联”,请按Ctrl + F,这将使您对如何处理关系之间的变化以及如何对关系进行最佳建模有一些了解。就错误而言,只要您提供正确的“ belongsTo”关系,级联还有助于解决这些问题。如果要删除或更改父对象,则还必须首先删除/更新子对象。如果对子项所做的更改失败,则原始调用将失败,并且任何更改都不会持久保存到数据库中。当文档中提到进行更改后的“保存”时,它指的是永久更改,这些更改在给定一组关系的情况下只能在某些情况下执行,例如子对象已被级联首先删除。抱歉,我无法直接给您答案,因为我不确定您是要更改模型样式还是实现自己的关系模型,但是希望这对您有所帮助。据我所知,GORM应该是线程安全的。转到最顶部,并阅读整个“ 5.对象关系映射(GORM)”部分。祝好运!     

要回复问题请先登录注册