最近,我们在我工作的公司开始了一个项目,以重组和重写我们的系统环境,并拯救我们孩子的未来。
由于可怕的代码,我们有3-4个遗留系统绝对无法适应新用例,但仍然可以通过不同的接口和格式(如电子邮件,xmlrpc,webinterface)每天处理大量订单。 / p>
因此,我们考虑基于完全重新设计的域模型从头开始编写新系统。由于我们不能简单地关闭旧系统并且是一个非常小的团队,我们得出的结论是,我们需要一种架构和方法,这使我们能够逐步开发新系统,并使其部分生活简单(阅读;快速)集成新接口,合作伙伴以及遗留应用程序和接口。
我们的想法是从头开始完全重新设计整个域模型,创建订单服务并将Apache Camel与OSGi容器结合使用,以模仿旧订单将订单路由到旧系统和新系统并解除格式处理并从新系统运输自己。由于逐步发展,我们希望选择更“以服务为中心”的架构,这将使我们逐步改进,可重用性和可扩展性。这一切听起来都很不错,而且我读了很多关于“SOA”的内容,但直到等待大肆宣传和“好的部分”留下来,但大多数谈话仍然是一个非常抽象和不准确的“技术”销售“似乎水平。
我发现“基本/共享数据服务”方法存在问题,如果我的实体有很多关系,如顺序,有相当大的图形。如果我要为Orders上的CRUD操作创建单独的服务,而其他实体基于更抽象的那些实体,那么处理ACID,关系完整性或者你将不得不牺牲这些服务和互连的自治权是真的有问题或不可能的。它们会使服务变得毫无用处(而且可能很慢)。或者我理解错了什么?
所以我的想法是简单地使用漂亮的JPA POJO创建一个“传统”DAL,当然还有接口,并将其部署为一个简单的版本化OSGi包,供业务和流程服务使用,具有更抽象的映射。然后,这些服务将简单地使用它并将其接口暴露给总线。为了满足需要访问个人数据的罕见情况,例如骆驼或批量数据导入或报告中的内容丰富,可以创建一个丑陋的“所有实体包含服务”来解决ACID和完整性问题。
到目前为止一直很好,但是:WebUI(我提到的主要是CRUD,因此不是真正的抽象过程)应该如何访问数据?直接使用JPA POJO会使它非常紧密地耦合,但创建一个映射并引入另一个几乎相同的模型并使用前面提到的“怪物DAL服务”听起来也不太好。
你怎么看?感觉,优雅和实用性之间的平衡在哪里?对不起,这些是几个问题,文字很长,但我觉得重要的是要更详细地描述我们在这里面临的情况。
感谢您的时间:)
答案 0 :(得分:0)
这不是一个希望你好运的笔记的答案。
我们的情况与您的情况相同/不同,事实证明这是一个非常难以处理的问题。
我认为你的方法没问题,听起来你的平衡很好。
您可以采用published by Martin Fowler之类的企业集成模式,但这是否会让您到达您想要/需要的地方仍然有待观察。
其他选项:有“香肠”机器:将旧系统推入生成“新”代码(Java或.Net)的系统,成为您的新平台。好消息是你现在拥有一个可以使用的语言的代码库,坏消息是它将是你想象中最大的最糟糕的spagetti。
即使这样,这也是一项艰巨的任务。一个政府机构在这里花了2到3年的时间和500万美元完成了这项工作。它不漂亮或无痛但似乎有效。如果你问得足够多(即:不在StackOverflow上)你应该找到那些已经处理过你所困难平台的人,与他们进行对话。