用于同步共享域模型的设计模式

时间:2017-07-18 15:46:11

标签: design-patterns

虽然我熟悉“四人帮”中描述的设计模式,但在企业级别上会有很多我从未听说过的模式。希望有一个能激发解决我正面临的问题的解决方案:

我有三个正在协同工作的应用程序。我们称之为ApplA,ApplB和ApplC。他们共享一些域模型,例如MyEntity课程

 public class MyEntity
 {
    public Guid ID {get;set;}
    public string Name {get;set;}
    //other properties 
 }

用户可以使用ApplA重命名此类对象。当发生这种情况时,应该在两者 ApplB和ApplC中进行操作。这可以通过使用排队来实现(Kafka,但排队系统的选择可能并不重要)。在愉快的路径之后,两个应用程序都从队列中获取消息,并执行各自的操作。

但是,替代路径是ApplB或ApplC在处理来自队列的消息时失败。假设应用程序ApplB失败,那么ApplC不应该执行其操作,或者撤消它的操作。如何解决这些问题是否有任何模式/指导。

编辑:在上面的文字中,我谈到了重命名MyEntity,但我看到该陈述如何被误解。通过重命名,我不打算更改类名,而是重命名类型MyEntity的对象(注意属性Name)。因此,为了提供更好,更明确的示例,请考虑使用Person实体的多个应用程序。

 public class Person
 {
    public Guid ID {get;set;}
    public string FirstName {get;set;}
    public string LastName {get;set;}
    //other properties 
 }

如果一个人更改了姓氏(当荷兰的女性结婚时,他们采取丈夫的姓氏仍然是常见做法),所有相关的应用程序都必须执行一些业务逻辑。请注意,不仅要更新一个数据库,还必须执行更多业务逻辑。现在,如果其中一个应用程序在执行其操作时失败而其他应用程序成功,那么什么模式/编程实践正在处理这样的问题呢?

1 个答案:

答案 0 :(得分:0)

由于您提及域模型作为方法的一部分,我将提出https://uikitplay.com/plays/FXuI的答案。对于不同的上下文(应用程序),域模型可能相似也可能不相似。您可以在链接上阅读有关每个模式的更多信息,但这里是:

  • 共享内核
  • 客户/供应商开发团队
  • 遵从者
  • 反腐败层
  • 分开方式

如果我没弄错的话,Apache Kafka就是一种“反腐败层”。

域模式超出了GoF(软件类模式)的范围,因为建模处于不同的层次。

关于您的“重命名”问题,很难说您何时不提供有关正在重命名的类的更多详细信息以及其他应用程序对名称的假设。在应该在大学工作的应用程序中将“Student”的域类重命名为“Fish”是没有任何意义的。这真的很多次取决于细节。