我正在尝试将 DDD 应用于一个 Java 项目。这是我偶然发现的问题:
在域中,我有一个使用复合 OOP 模式实现的聚合。该聚合上的方法会生成一些需要序列化并通过线路发送的域对象。这些是我想到的选项:
在我的域的应用程序服务部分中,我正在聚合,调用它的方法,并尝试将结果序列化到 DTO。为了将其序列化为 DTO,我必须instanceof
检查当前节点是复合节点还是子节点,然后继续序列化。由于instanceof
代码味道(正如我读到的,它违反了打开/关闭原则等),我决定尝试使用访问者模式。
为了应用访问者模式,我的复合聚合必须实现访问者,它将返回 DTO,然后 DTO 成为域层的一部分 - 这也不是一个好的设计(因为域应该只包含域概念,而 DTO 不属于其中) 。DTO 序列化只是技术细节,不应该进入领域层。
还有其他不违背这些设计原则的解决方案吗?
有没有办法在java中模拟重载方法的动态绑定(除了instanceof
- 因为这可以解决我使用选项1的问题)?
小怪兽爱吃肉
九州编程
一只名叫tom的猫
相关分类