我有一个商店对象,其中一个区域只能包含一个开放的商店。 实体模型
@Entity
Public class Shop{
@Id @GeneratedValue Long id;
String Name;
String Area;
String closed;
}
领域模型
Public class ShopModel{
String Name;
String Area; //unique identifier of shop
String closed;
}
休息资源
Public class ShopResource{
String id;
String Name;
String Area;
String closed;
}
根据我的理解,当我们收到任何请求时,转换将如下进行:
资源 -> 领域模型 -> 实体和实体 -> 领域模型 -> 资源
我必须创建 CRUD Rest api,并且必须根据 id 公开获取每个商店资源。在那种情况下, 如果我的域模型缺少 id 属性,我对如何在资源对象中映射 id 感到困惑?
这是正确的做法吗?我们是否应该直接将实体转换为资源并保留域仅用于执行业务逻辑?或者将 id 属性添加到我的域模型中。
请建议什么是正确的方法。
第1步.定义商店资源:
/shops/{id}
步骤 2. 为 API 层的 HTTP
GET
方法定义方法(伪代码):
ShopResource get(Long id) {
return new ShopResource(shops.shop(id));
}
第3步.在领域层定义类:
class Shops {
Shop shop(Long id) {
// invoke data layer
}
}
您可以在商店中拥有
id
或在 API 层中设置它,因为您从请求中知道它(取决于该对象的其他用途,在这种情况下并不重要)。
附注我建议您考虑如何确保数据库中的数据完整性,您可能需要多个表。例如,考虑一个场景,您在一个区域有 3 个商店:1 个营业,2 个关闭,您的数据库如何不允许一个商店的状态更改,使其变为 2 个营业和 1 个关闭。