有一个域的目的是在相当多的公司之间进行协调过程。该过程通过请求和通知消息进行通信,每个消息都通过 Web 服务 (SOAP) 请求传输。每个公司都必须提供自己的 SOAP 端点才能接收请求消息,并且他们必须以 Web 服务客户端的角色发送通知。
手头的规范描述了该过程,并且有描述接口的 XSD 和 WSDL 文件。
我设计参与实现的首选方法是查看域,制定一种普遍存在的语言(基于规范)并创建一个域模型。我想在基础设施/技术方面尽可能地实现该域,请阅读:在以 Java EE、JPA 为目标时,我想将基础设施依赖项/库排除在核心域的代码之外。
当我应用这种方法时,我可以实现一个与规范语言非常一致的域模型。目前,我什至相信它对于规格中相当模糊的细节确实很有表现力。然而,域模型与 XSD 描述的 web 服务模型有很大不同,这是一个事实。
请注意:系统的未来用户和操作员(假设是领域专家并分散在所有参与的公司中)很可能会针对 SOAP 接口上的请求和消息进行辩论。因此,这两种模型之间的转换将一直存在需求,例如,当我的系统用户与开发人员交谈时,当有人直接查看数据库时,......
第二种可行的方法可能是强制 Web 服务、域模型和持久性之间的硬对齐。可以使用 HyperJAXB3 将 XSD 生成的类映射到持久层。由于我在我的手工模型中适当地使用了@Embedded,并且我简化和统一了一些模型元素,因此生成的数据库表的数量存在很大差异,大约是 5 倍。这使得基于 XSD 的数据库模式更难掌握。
所以我的“简单”问题是:我应该努力在这个域中的web 服务、域模型和持久性之间保持一致,因为通信是核心还是我应该继续我的(首选)解决方案来手工制作一个更具表现力的域模型?
欢迎参考。