2

最近,我们在我工作的公司启动了一个项目,以重组和改写我们的系统环境并拯救我们孩子的未来。

我们有 3-4 个遗留系统,由于可怕的代码,它们绝对无法适应新的用例,但仍然每天通过不同的接口和格式(如电子邮件、xmlrpc、webinterface)处理大量订单。

所以我们考虑基于完全重新设计的领域模型从头开始编写一个新系统。由于我们不能简单地关闭旧系统并且是一个非常小的团队,我们得出的结论是,我们需要一种架构和方法,使我们能够逐步开发新系统并轻松地将其部分投入使用(阅读;快速)集成新接口、合作伙伴以及与旧应用程序和接口。

这个想法是从头开始完全重新设计整个域模型,创建一个订单服务,并使用带有 OSGi 容器的 Apache Camel 来模仿将订单路由到旧系统和新系统的旧接口,并将格式处理和传输本身解耦从新系统。由于逐步发展,我们希望选择更加“以服务为中心”的架构,这将使我们能够逐步改进,可重用性和可扩展性。这一切在纸上听起来都不错,我读了很多关于“SOA”的文章,但直到等待炒作消失和“好的部分”留下来,但大部分谈话仍然是一个非常抽象和不精确的“技术”销售”的水平。

如果我的实体有很多关系,比如订单,我发现“基本/共享数据服务”方法很成问题,而且图表很大。如果我要为 Orders 和其他实体上的 CRUD 操作创建一个单独的服务以作为更抽象的基础,那么处理 ACID、关系完整性将是非常有问题或不可能的,或者您将不得不牺牲这些服务的自主性和互连它们,这将使服务变得非常无用(并且可能非常缓慢)。还是我理解错了?

所以我的想法是使用漂亮的 JPA POJO(当然还有接口)简单地创建一个“传统”DAL,并将其部署为一个简单的、版本化的 OSGi 包,以供业务和流程服务使用,具有更抽象的映射。然后这些服务将简单地使用它并将它们的接口暴露给总线。为了满足需要访问单个数据的罕见情况,例如骆驼或批量数据导入或报告中的内容丰富,可以创建一个丑陋的“包含所有实体的服务”,这将解决 ACID 和完整性问题。

到目前为止一切都很好,但是:WebUI(正如我提到的主要是 CRUD,因此不是真正的抽象过程)应该如何访问数据?直接使用 JPA POJO 会使其耦合得非常紧密,但是创建映射并引入另一个几乎相同的模型并使用前面提到的“怪物 DAL 服务”听起来也不太好。

你怎么看?感觉、优雅和实用性之间的良好平衡在哪里?

很抱歉,这是几个问题,而且文字很长,但我觉得更详细地描述我们在这里面临的情况很重要。

感谢您的时间 :)

4

1 回答 1

0

这与其说是一个答案,不如说是一个祝你好运的便条。

我们的情况与您的情况相同/不同,事实证明这是一个非常难以有效处理的问题。

我认为您的方法还可以,听起来您正在取得不错的平衡。

您可以采用像Martin Fowler 所发布的企业集成模式,但这是否能让您到达您想要/需要的地方还有待观察。

其他选择:有“香肠”机器:您将旧系统推入生成“新”代码(在 Java 或 .Net 中)的系统中,该代码将成为您的新平台。好消息是你现在有了一个可以使用的语言的代码库,坏消息是这将是你想象中最大最糟糕的一堆意大利面条。

Even then it's a huge undertaking. A government agency here spent 2 or 3 years and $5Million getting this done. It wasn't pretty or painless but seems to have worked. If you ask around enough (i.e: not on StackOverflow) you should find people who have dealt with migrating off the platforms your stuck with, get into a conversation with them.

于 2010-12-10T00:51:59.420 回答