soa - 如何平衡 DRY 原则和最小化依赖关系?

标签 soa dry enterprise rules

我遇到了 DRY 原则(不要重复自己)和最小化围绕 Rete 规则引擎的依赖关系的问题。

大型 IT 组织中的规则引擎往往是企业级的(注意大写的“E”——这是一项严肃的业务)。所有规则都必须表达一次,既好又干,并集中在一个昂贵的规则引擎中。组维护规则引擎并且是规则集的保持者。

当该 IT 组织是美国保险公司的一部分时,往往会有很多规则。有适用于所有州和产品的规则,但每个州倾向于针对不同的产品制定自己的法律,因此规则需要反射(reflect)这些怪癖。类别很多:精算、承保,甚至用于从第 3 方机构订购信用和机动车辆报告。

从设计的角度来看,我遇到的问题是集中规则和处理当然是好的和干燥的,但是有成本:

  • 额外的网络跃点以访问位于中心的规则服务并返回结果;
  • 如果规则引擎被暴露为 SOAP Web 服务,则额外的复杂性 - 消费者必须打包 SOAP 请求并将响应 OXM 回他们自己的域;
  • 维护规则引擎的企业组、设置和维护规则的业务以及使用规则的开发人员之间的附加接口(interface);
  • 额外的复杂性——有时数据驱动的解决方案可能就足够了。
  • 额外的依赖 - 无法控制自己的规则的组件必须担心规则引擎的外部依赖,以进行测试、部署、发布等。

  • 这些问题随着许多其他企业技术(例如,B2B 网关、ESB 等)的出现而出现。

    相同的企业组也将 SOA 吹捧为基本原则。但我对正确服务设计的理解是,它们应该平铺业务空间,并且是幂等的、独立的和孤立的。如果服务的规则在其他地方维护,服务如何独立和隔离?

    我想在简单性方面犯错,认为如果规则可以被证明仅适用于孤立的情况,那么消除依赖关系应该优先于集中化。我不确定这个争论是否会赢得胜利。

    所以我的问题是:
  • 您对集中化与独立性的争论有何看法?
  • 您对规则引擎等企业工具有何经验?
  • 我怎样才能使孤立的论点更有力?
  • 如果我的观点不正确,你会提出什么论据来支持中心化?
  • 最佳答案

    从长远来看,整个设备的易于维护将是绝对要求。

    所以 DRY 应该不惜一切代价得到尊重,即使这涉及到这里和那里的性能损失、一些额外的配置问题和其他“小”问题。

    “独立”也不同于“独立”。

    否则想象一下当你需要改变一些东西并且你必须联系很多不同的方面来强制他们更新的情况。使用 DRY,您还可以解决在短时间内同时运行不兼容版本的问题。

    所以

  • 集中化 > 独立性(至少在你描述的系统中)
  • 规则引擎的单点真相(每个人都在同一页上)
  • 随着岁月的流逝,提醒他们维护成本
  • 我觉得你的观点是正确的。
  • 关于soa - 如何平衡 DRY 原则和最小化依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242412/

    相关文章:

    c# - 在实现具有同步和异步 API 的库以实现相同功能时使用 async await

    c++ - 使用 DRY 原则重构逻辑

    iphone - iOS 企业应用 : How to roll out updates?

    ios - 如何在 XCode 6.3 iOS 项目中找到权利 plist 文件

    database - 关于将数据从一个数据库同步到其他应用程序数据库的有效方法的任何建议?

    c# - 对服务类使用静态只读引用有什么问题吗?

    wcf - 在 Azure 中托管超过 25 个 WCF 服务

    soa - 为什么要让您的产品兼容 SOA?

    unit-testing - 设置/拆卸会损害测试的可维护性吗?

    iphone - 内部 iPhone 应用程序分发