- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,在我工作的地方,在过去的几十年中,我们维护了相当数量的系统。
该系统的多样性在于,可以使用多种操作系统(Linux,Solaris,Windows),多种数据库(oracle,sybase和mysql的多个版本),甚至多种语言(C,C++,JSP,PHP以及其他多种语言)。用过的。
每个系统都是相当自治的,即使是以将相同数据输入到多个系统中为代价的。
管理层最近决定,我们应该研究如何使所有系统快乐地互相交谈并共享数据。
请记住,尽管我们可以对任何单个系统进行软件更改,但是完全不可能对任何一个(或多个)系统进行完全重写。
这里的几个开发人员的第一个想法是简单明了:如果系统A需要系统B的数据,则它应该只连接到系统B的数据库并获取它。同样,如果需要提供B数据,则应将其插入B的数据库中。
由于使用的数据库(和版本)一团糟,其他开发人员认为我们应该有一个新的数据库,将所有其他系统中的表合并在一起,以避免不必要地处理多个连接。通过这样做,他们希望我们可以合并一些表并摆脱冗余数据条目。
这是关于我被带入对整个困惑状况发表意见的时间。
使用数据库作为系统通信手段的整个想法对我来说很可笑。必须将业务逻辑放入多个系统中(如果系统A要向系统B添加数据,则它在执行插入操作之前可以更好地理解B与数据有关的规则),则多个系统很可能必须进行某种形式的数据库轮询才能找到对其数据的任何更改,继续维护将是一件令人头疼的事,因为对数据库架构的任何更改现在都将传播多个系统。
我的第一个想法是花时间为不同的系统编写API/服务,一旦编写API/服务,就可以轻松地用于来回传递/检索数据。许多其他开发人员认为,这比仅仅使用数据库还要多,而且工作量大得多。
那么,使这些系统互相通信的最佳方法是什么?
最佳答案
集成不同的系统是我的日常工作。
如果您是我,我将竭尽全力避免直接从系统B中访问系统A的数据。从系统B更新系统A的数据库是非常不明智的。使您的业务逻辑如此分散与优良作法恰恰相反。您最终会后悔的。
中央数据库的想法不一定很糟糕……但是所涉及的工作量可能在从头开始重写系统的数量级之内。至少在您描述的形式中,我当然不会尝试。它可以成功,但是要困难得多,而且比点对点集成方法要花更多的纪律。听到它与将数据直接插入其他系统的“牛仔”方法一样的建议,真是有趣。
总体而言,您的直觉似乎还不错。有两种方法。您提到一个:实现服务。这不是坏方法,特别是如果您需要实时更新。另一个是单独的集成应用程序,负责对数据进行混排。这是我通常采用的方法,但是通常是因为我无法更改要集成的系统以要求其所需的数据;这是我通常采用的方法。我必须推送数据。在您的情况下,服务方法不是一个坏方法。
我想说的是,对于第一次进入系统集成的人来说可能并不明显,那就是系统中的每条数据都应该有一个单一的权威性事实。如果数据是重复的(并且是重复的),并且副本彼此不一致,则必须以该数据的真实性为准将副本视为正确。如果没有复杂性以指数级的速度飙升,则没有其他方法可以集成系统。意大利面条集成就像意大利面条代码一样,应该不惜一切代价避免。
祝你好运。
编辑:
中间件解决了传输问题,但这不是集成中的中心问题。如果系统足够靠近,一个应用程序可以将数据直接推送到另一个应用程序中,那么它们可能足够靠近,一个应用程序可以直接调用另一个应用程序提供的服务。我不建议您使用中间件。您可能会从中获得一些好处,但是增加的复杂性将无法弥补这一点。您需要一次解决一个问题。
关于legacy-code - 如何最好地集成几个系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133919/
我正在实现 Android Room Database,在其中一个教程中我发现了 androidx.legacy:legacy-support-v4:1.0.0 的用法依赖。谁能告诉我使用这种依赖关系
我收到来自某些旧代码的 SOAP 请求,并使用 JAX-WS 生成的对象来处理该请求,该对象来自旧代码使用的同一 WSDL,但在处理该请求时收到 Unmarshalling Error:unmarsh
我遇到了很多错误,比如 /usr/local/include/opencv2/legacy/legacy.hpp:2994:12: error: 'CvSubdiv2DEdge' does not n
在更新 Flutter 和一些软件包后,我一直得到 Failed to resolve: androidx.legacy:legacy-support-v4:27.0.1 error 我已将我的项目迁
任何有用的指标都可以 最佳答案 我在代码中寻找的一件事是单元测试。这将提供重构它的自由。所以如果代码没有测试,我认为它是遗留代码。 关于legacy - 你什么时候说代码是遗留代码?,我们在Stack
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
有没有人有将FxCop引入遗留代码的经验?如果有人引入违反规则的代码,我们希望构建失败。但是暂时而言,这是不可能的,因为遗留代码有9000多次违规。 抑制错误的唯一方法是通过SuppressMessa
我听说许多开发人员将代码称为“遗留”。大多数时候,它是由不再参与该项目的人编写的代码。是什么构成了代码、遗留代码? 更新响应:“从祖先、前辈或过去传下来的东西”http://www.thefreedi
我们在工作中遇到过这样的情况:在遗留(核心)系统上工作的开发人员在向已被意大利面条式代码感染的现有代码中添加新功能时,被迫使用 GOTO 语句。 现在,我知道使用“只使用一个小 GOTO”而不是花时间
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
多年来,我听到很多关于我们开发人员必须使用的继承项目的提示。 WTF网站上有无数的示例代码,这些代码使我实际上喃喃自语“WTF?”。 但是,实际上没有向您提供使您离开的代码吗,“这真是深思熟虑!”或“
好吧,在我工作的地方,在过去的几十年中,我们维护了相当数量的系统。 该系统的多样性在于,可以使用多种操作系统(Linux,Solaris,Windows),多种数据库(oracle,sybase和my
我们是一个研究遗留代码的团队,这些代码非常古老,并且是用最初的编程语言编写的。由于团队成员接受了最新技术的培训,并且现在开始处理遗留代码,他们并不满意。如何激励他们也使用遗留代码? 最佳答案 只有现金
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 5年前关闭。 Improve this
我知道它是在 IBM 360 大型机架构上实现的,但有谁知 Prop 体使用了什么语言?据说其中大部分是在 3-4 个月内编程和部署的——对于任何项目来说,这都是一个相当快的周转,更不用说有能力监控整
我正在考虑在 Azure 上运行我们的一些业务。 我正在尝试选择最适合我公司的服务,但我收到的信号很复杂。 因为我正在启动一个新系统,所以我想选择非“旧版”(也称为“当前”)的产品。但似乎没有直接的方
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: What makes code legacy? “遗留代码”的定义是什么? 最佳答案 引导 Michael Feat
我正在制作一个应用程序,为客户提供大致的贷款报价(稍后由其他后台系统计算)。我从我们为其制作计算器的金融公司收到了一些代码。我的问题是我不理解计算年百分比率(包括启动费和月费)的代码部分。 他们可能正
我正在尝试关注 this教程并遇到 Node.js 安装问题。在 Debian VM 上安装,并在 nodejs 站点上运行建议的安装命令: curl -sL https://deb.nodesour
我是一名优秀的程序员,十分优秀!