我们正在构建一个企业应用程序,它在表示层使用Spring MVC,在业务层使用EJB,使用JPA进行数据访问。应用程序需要根据用户从GUI输入的几个搜索条件支持各种实体的搜索功能。这似乎是大多数企业应用程序中相当普遍的功能,我想知道是否有任何设计模式/原则提供最佳方法。 目前,我们为每个业务实体提供了SearchCriteria类(例如AccountSearchFilter for Account)。表示层构建SearchCriteria类的对象并将其传递给业务层。业务层基于可用条件构建JPA查询,并创建实体对象的集合。该集合将传递回表示层,然后通过表示层将其转换为JSON。
这个设计有两个问题:
我不喜欢在演示层和业务层之间共享类,但我不知道我们可以做些什么来解耦它。我已经搜索了关于在表示层中使用域对象的现有帖子,我不想开始讨论它是好还是坏。我已经下定决心,我不希望使用域对象的表示层。此外,创建DTO似乎重复代码,所以如果这是唯一可行的解决方案,那么我可以传递这个。