面向对象的紧密耦合.我应该什么时候做呢?
本文关键字:什么时候 我应该 耦合 面向对象的 | 更新日期: 2023-09-27 18:17:03
我已经实现了两个服务。一个从Country API提取数据,另一个从County API提取数据。
我喜欢保持我的控制器干净,所以我很好奇将我的服务组合在一起而不是分开是否是个好主意。
我不太清楚什么是紧耦合,什么时候合适,什么时候不合适。
我应该走这条路吗?
public async Task<IActionResult> Get(
[FromQuery] double latitude,
[FromQuery] double longitude
{
var countryService = new CountryService();
var countryData = await countryService.Get(latitude, longitude);
var countyService = new CountyService();
var countyData = await countyService.Get(latitude, longitude);
return Ok(new Data(countryData, countyData);
}
或
public async Task<IActionResult> Get(
[FromQuery] double latitude,
[FromQuery] double longitude
{
var combinedService = new CombinedService();
Data combinedData = await combinedService.Get(latitude, longitude);
return Ok(combinedData);
}
当您在域级别上感知内聚时,紧密耦合是一个很好的主意。在Eric Evans的书DDD中定义了"有界上下文"这个术语。这样想:这两个部分之间共享了多少信息/知识?如果这是一个相当高的百分比,你也可以结合他们,因为他们已经在域级别。这也是对Larmans对信息专家的GRASP定义的仿射。
首先,确保您谈论的是CountryService
和CountyService
之间的紧密耦合,而不是控制器和服务之间的紧密耦合。
你给出的例子是紧密耦合的服务和控制器,这是从来没有一个好东西。一个干净的控制器应该在它的构造函数中接受服务接口,而不是在一个具体的实现上执行new。
关于是否将CountryService
和CountyService
合并为CombinedService
,决定很简单:
- 如果您至少有一个客户端只使用其中一个而不使用另一个,则将它们分开
- 按在一起是所有客户端组合使用