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