繁体   English   中英

与使用存储库相比,使用服务有什么区别? Spring 开机

[英]What's the difference between using a Service compared to using a repository? Spring Boot

这是两个例子。

示例 1:

使用EntityRepositoryService创建一个 CRUD 数据库。 https://github.com/alejandro-du/crudui/tree/master/demo/src/main/java/org/vaadin/crudui/demo

代码的使用可以在这里展示: https://github.com/alejandro-du/crudui/blob/master/demo/src/main/java/org/vaadin/crudui/demo/ui/view/SimpleCrudView .java

在这里我们可以看到UserService userServiceGroupService groupService被用于在 CRUD 数据库中存储值。

示例 2:

这是我使用@Autowired Repository的示例

https://github.com/DanielMartensson/OpenSourceLogger/tree/master/src/main/java/se/danielmartensson/views

这里: https://github.com/DanielMartensson/OpenSourceLogger/blob/master/src/main/java/se/danielmartensson/views/MySQLView.java

题:

使用Service Object而不是使用@Autowired Repository有什么区别

例子:

如果我在这里使用@Autowired Repository backend ,我可以在这里写入 CRUD 数据库。

    crud.setCrudListener(new CrudListener<User>() {
    @Override
    public Collection<User> findAll() {
        return backend.findAllUsers();
    }
    @Override
    public User add(User user) {
        return backend.add(user);
    }

    @Override
    public User update(User user) {
        return backend.update(user);
    }

    @Override
    public void delete(User user) {
        backend.remove(user);
    }
});

如果我像这样使用服务 object。 我还可以写入 CRUD 数据库。

@Route(value = "simple", layout = MainLayout.class)
public class SimpleCrudView extends VerticalLayout {

    public SimpleCrudView(UserService userService, GroupService groupService) {
        // crud instance
        GridCrud<User> crud = new GridCrud<>(User.class);

        // grid configuration
        crud.getGrid().setColumns("name", "birthDate", "maritalStatus", "email", "phoneNumber", "active");
        crud.getGrid().setColumnReorderingAllowed(true);

        // form configuration
        crud.getCrudFormFactory().setUseBeanValidation(true);
        crud.getCrudFormFactory().setVisibleProperties(
                "name", "birthDate", "email", "salary", "phoneNumber", "maritalStatus", "groups", "active", "mainGroup");
        crud.getCrudFormFactory().setVisibleProperties(
                CrudOperation.ADD,
                "name", "birthDate", "email", "salary", "phoneNumber", "maritalStatus", "groups", "active", "mainGroup",
                "password");
        crud.getCrudFormFactory().setFieldProvider("mainGroup",
                new ComboBoxProvider<>(groupService.findAll()));
        crud.getCrudFormFactory().setFieldProvider("groups",
                new CheckBoxGroupProvider<>(groupService.findAll()));
        crud.getCrudFormFactory().setFieldProvider("groups",
                new CheckBoxGroupProvider<>("Groups", groupService.findAll(), Group::getName));
        crud.getCrudFormFactory().setFieldProvider("mainGroup",
                new ComboBoxProvider<>("Main Group", groupService.findAll(), new TextRenderer<>(Group::getName), Group::getName));

        // layout configuration
        setSizeFull();
        add(crud);
        crud.setFindAllOperationVisible(false);

        // logic configuration
        crud.setOperations(
                () -> userService.findAll(),
                user -> userService.save(user),
                user -> userService.save(user),
                user -> userService.delete(user)
        );
    }

}

IMO,当你在服务层工作时,你可以注入多个存储库,但如果你使用存储库,那么只有 1 个实体 object。

基本上只是 1 个实体 object 上的 CRUD,服务并没有太多优势。 但是当你从两个在业务逻辑上有某种联系的实体工作时,服务就更有意义了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM