java - 在面向服务的架构中,映射器调用服务是一种好习惯吗?
问题描述
我想知道在自定义对象映射器中调用/注入(微)服务是否是一种好习惯。
此映射器将实体转换为 DTO。在这个 DTO 中有一个字段包含一些值的总和(需要一些业务逻辑)。我定义了一个服务来集中逻辑,因为它在许多其他地方使用。
解决方案
虽然严格来说从映射器调用服务并没有错,但它确实为映射器添加了依赖关系,映射器通常是一个纯对象(Plain Old Java Object,POJO),它只是将一种类型的对象转换为另一种类型。另一种方法是将所需信息作为参数传递给映射器。例如,假设您当前的设计类似于以下内容:
public class Foo { /* ... */}
public class FooDto { /* ... */}
public class FooService {
public FooResults getSomeResults() { /* ... */ }
}
public class FooMapper {
private final FooService service;
public FooMapper(FooService service) {
this.service = service;
}
public FooDto convert(Foo foo) {
FooResults results = service.getSomeResults();
// ... use results ...
}
}
您可以将in 作为参数传递给方法,而不是FooMapper
依赖于:FooService
FooResults
convert
public class FooMapper {
public FooDto convert(Foo foo, FooResults results) {
// ... use results ...
}
}
这种方法的优点FooMapper
是不再依赖于FooService
. 相反,调用该convert
方法的客户端必须具有对 的引用FooService
才能获取FooResults
对象。
推荐阅读
- javascript - 我应该在 Promise 中包装 jquery ajax 还是直接返回 jquery ajax?
- c++ - 如何使用 scons 为使用 jenkins 的 solaris 兼容操作系统构建 C++ 代码?
- asp.net-core - 用户登录失败
在生产中,但本地客户端使用相同的连接字符串 - html - 表 TD 包装(错误)行为?
- typescript - 类型 'T' 不满足约束 'string | 号码 | 象征'。类型“T”不可分配给类型“符号”
- google-apps-script - 在谷歌卡中插入谷歌图表
- python - 带有 Click 命令别名的常规用法输出
- selenium - Jenkins 中的范围报告显示附加屏幕截图的空白图标
- android - Flutter/Dart:如何向 TextFormField 等单选按钮添加验证?
- mysql - MySQL程序不会插入任何数据,但它之外的查询可以工作