返回

彻底搞懂Util、POJO、domain、entity、model、DAO、DTO、view、mapper、service、controller的作用和区别

前端

领域建模的利器:工具、对象和层之间的交互

在软件开发中,领域建模是一个至关重要的概念,它涉及将真实世界的概念和关系抽象成计算机模型。这一模型由相互作用的组件组成,这些组件定义了系统中的实体、行为和相互关系。为了实现这一目标,需要使用一系列专门的工具、对象和层,它们共同作用,使我们能够构建复杂且可维护的软件应用程序。

工具箱:Util Layer

工具类层是一个存放实用程序类的地方,这些类提供各种功能,包括日期格式化、字符串操作和集合处理。这些类通常非常独立且可重复使用,因此将它们集中在一个位置有助于避免代码重复和提高可维护性。

代码示例:

import java.text.SimpleDateFormat;

public class DateUtil {

    public static String formatDate(Date date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.format(date);
    }
}

数据载体:POJO

POJO(普通旧 Java 对象)是 Java 中的数据对象,它表示领域模型中的实体。这些对象通常包含属性、方法和行为,用于表示真实世界中的对象,例如用户、产品或订单。

领域模型三剑客:Domain、Entity、Model

领域模型的三大基石是 domain、entity 和 model:

  • 领域 (domain) :一个总括性术语,指业务领域及其所有概念和关系的抽象表示。
  • 实体 (entity) :领域模型中独立存在的对象,具有唯一标识符和其他定义特征。
  • 模型 (model) :实体在计算机系统中的具体表示,用于捕获实体的属性和行为。

数据访问桥梁:DAO

数据访问对象 (DAO) 是一个接口,它定义了一个特定实体的所有数据库交互。通过 DAO,我们可以访问、操作和持久化实体,从而与数据库进行交互。

代码示例:

public interface UserDao {

    User findUserById(int id);
    List<User> findAllUsers();
    void createUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

跨层数据传输:DTO

数据传输对象 (DTO) 用于在不同层之间传输数据。与 POJO 类似,DTO 是 POJO 的子类,但仅包含在层之间传递所需的数据。这有助于优化数据传输并提高性能。

代码示例:

public class UserDto {

    private int id;
    private String username;
    private String email;
}

展现数据的画布:View Layer

视图层负责向用户展示数据。它通常由 HTML、CSS 和 JavaScript 组成,并通过控制器从服务层获取数据。视图层允许用户与应用程序交互并查看和操纵数据。

代码示例:

<!DOCTYPE html>
<html>
<head>
    
</head>
<body>
    <h1>User List</h1>
    <ul>
        {% for user in users %}
            <li>{{ user.username }}</li>
        {% endfor %}
    </ul>
</body>
</html>

POJO 与 DTO 之间的转换器:Mapper

Mapper 是一个数据映射器,用于将 POJO 转换为 DTO,反之亦然。它定义了 POJO 和 DTO 之间的映射关系,并在实体和传输对象之间提供无缝转换。

代码示例:

@Mapper
public interface UserMapper {

    UserDto toDto(User user);
    User toEntity(UserDto userDto);
}

业务逻辑的执行者:Service Layer

服务层是一个接口,它定义了应用程序中的所有业务逻辑。服务层通常调用 DAO 层和 Mapper 层来执行实际的业务操作。

代码示例:

public interface UserService {

    User findUserById(int id);
    List<User> findAllUsers();
    void createUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

协调各方的指挥官:Controller Layer

控制器层是一个接口,它协调各层之间的交互。它接收来自视图层的请求,调用服务层处理业务逻辑,然后将结果返回给视图层。

代码示例:

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String getAllUsers(Model model) {
        List<User> users = userService.findAllUsers();
        model.addAttribute("users", users);
        return "users";
    }
}

结论

这些包在领域建模中发挥着至关重要的作用。它们允许我们组织、结构化和管理复杂的数据和逻辑,从而构建强大且可维护的软件应用程序。通过理解这些组件的目的和交互,我们可以有效地利用它们来创建满足用户需求且符合最佳实践的解决方案。

常见问题解答

  1. 什么是领域建模?
    领域建模是一种抽象业务领域的实践,将其转换为计算机模型,以表示实体、关系和行为。

  2. POJO 和 DTO 有什么区别?
    POJO 是实体的完整表示,而 DTO 是仅包含在层之间传输所需数据的 POJO 的子类。

  3. Mapper 的作用是什么?
    Mapper 用于将 POJO 转换为 DTO,反之亦然,它定义了实体和传输对象之间的映射关系。

  4. 服务层和控制器层之间有什么区别?
    服务层定义业务逻辑,而控制器层协调各层之间的交互,并处理来自视图层的请求。

  5. 领域模型三剑客 (domain、entity、model) 有什么作用?
    Domain 是业务领域及其概念和关系的总体表示;Entity 是领域模型中独立存在的对象;Model 是实体在计算机系统中的具体表示。