首页 > 解决方案 > 在面向服务的架构中,映射器调用服务是一种好习惯吗?

问题描述

我想知道在自定义对象映射器中调用/注入(微)服务是否是一种好习惯。

此映射器将实体转换为 DTO。在这个 DTO 中有一个字段包含一些值的总和(需要一些业务逻辑)。我定义了一个服务来集中逻辑,因为它在许多其他地方使用。

标签: javaspringjavabeansclean-architecture

解决方案


虽然严格来说从映射器调用服务并没有错,但它确实为映射器添加了依赖关系,映射器通常是一个纯对象(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依赖于:FooServiceFooResultsconvert

public class FooMapper {

    public FooDto convert(Foo foo, FooResults results) {    
        // ... use results ...
    }
}

这种方法的优点FooMapper是不再依赖于FooService. 相反,调用该convert方法的客户端必须具有对 的引用FooService才能获取FooResults对象。


推荐阅读