如何合理的定义领域模型
CREATE TABLE `user`
(
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`name` VARCHAR(64) NOT NULL COMMENT '姓名',
`email` VARCHAR(32) DEFAULT NULL COMMENT '邮箱号',
`mobile` VARCHAR(16) DEFAULT NULL COMMENT '手机号',
`password` VARCHAR(128) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`) USING BTREE
) COMMENT = '用户表';
CREATE TABLE `employee`
(
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`user_id` VARCHAR(64) NOT NULL COMMENT '用户ID',
`employee_no` VARCHAR(32) NOT NULL COMMENT '工号',
PRIMARY KEY (`id`) USING BTREE
) COMMENT = '员工表';
CREATE TABLE `department`
(
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`parent_id` VARCHAR(64) NOT NULL COMMENT '父ID',
`name` VARCHAR(64) NOT NULL COMMENT '部门名称',
) COMMENT = '部门表';
CREATE TABLE `user_department`
(
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`user_id` VARCHAR(64) NOT NULL COMMENT '工号',
`department_id` VARCHAR(64) NOT NULL COMMENT '部门ID',
`sort` INT DEFAULT 0 COMMENT '用户在部门中显示顺序,值越大越靠前',
) COMMENT = '用户与部门关联表';
用户与员工一对一,员工与部门多对多。用户是员工才能有部门
1.创建部门、更新部门、获取部门详情信息
2.创建用户、更新用户、获取用户详情信息
如何合理的设计这几个接口的出入参数、提供代码的通用性且好扩展
在当前的Java EE趋势下,你这种简单的CRUD,出入参完全就取决于Model如何设计了,Model设计的好,代码自然简单易懂,我建议如下
1.用户与员工一对一,但是先有用户,后有员工还是先有员工,后有用户,由你自己来决定,既然是一对一,你就应该用一张表来存储,满足SQL范式
2.解决is-a问题,用户是员工,或者员工是可登录的用户,为了区分是员工和是用户,可以用继承完成,员工
employee
继承user
,Mapper
层面也可以继承,运行时,可通过instanceof employee
完成对员工的判定3.相信到这里,不难看出,新增用户和将一个用户变成员工,是完全不同的接口设计,这样拓展性极强,而且底层表是同一张,链表查询复杂度大大降低
4.如果后续有其他新增字段,可以选择
_extents
这样的表,将不常用字段或附加属性隔离5.回头看这6个接口的出入参设计
其他细节自行考虑