面向对象的紧密耦合.我应该什么时候做呢?

本文关键字:什么时候 我应该 耦合 面向对象的 | 更新日期: 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定义的仿射。

首先,确保您谈论的是CountryServiceCountyService之间的紧密耦合,而不是控制器和服务之间的紧密耦合。

你给出的例子是紧密耦合的服务和控制器,这是从来没有一个好东西。一个干净的控制器应该在它的构造函数中接受服务接口,而不是在一个具体的实现上执行new

关于是否将CountryServiceCountyService合并为CombinedService,决定很简单:

  • 如果您至少有一个客户端只使用其中一个而不使用另一个,则将它们分开
  • 按在一起是所有客户端组合使用