我想听听有关软件设计的一些意见:
我目前正在基于以下软件开发软件
:Controller
Service
Repository
我不确定每个层使用不同的数据模型是否是一个好习惯。
Controller -> Receives a DTO and converts it into a "service object"
Service -> Receives a "service object" and converts it into a database entity
Repository -> persists a database entity
似乎有很多重复的代码,因为通常每一层中的信息交换不会有太大差别。
假设您有两项服务 可用性:检查可用日期 预订:进行预订
现在,如果在致电可用性服务时可以使用该日期,则必须预订该日期。应该如何管理这种依赖性?
- Option 1: calling BookingService from inside AvailabilityService
AvailabilityService {
Calling BookingService
}
- Option 2: calling BookingService after the response of AvailabilityService
AvailabilityController {
Calling AvailabilityService
Calling BookingService (base on the response from AvailabilityService)
}
答案 0 :(得分:1)
问题1: 该模型取决于谁在“处理”数据。具有O / R映射器的持久层具有某种建模对象的方式(或更准确地说,是类)。另一方面:浏览器中的视图(不是数据库中的视图)通常会混合来自不同objets的数据,因此,您将为该视图创建自定义的DTO,其中包含该视图需要显示的内容。这还包括不公开视图不需要的数据,并避免多个请求(首先是该对象,然后是...)。如果需要进一步转换,则必须确定某人是否需要其他数据结构。我认为这不是通常的用例,通常您必须将数据库中的数据结构映射到视图所需的数据。
问题2: 如果您的AvailabilityService仅检查可用性,则不应预订。否则名称将为假。在选项2中,控制器的名称有误,这显然不是AvailabilityController,而是类似于OrderController的东西,请注意选择好名字(干净的代码)。