0

我已经实现了两项服务。一个从 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);
    }
4

2 回答 2

0

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

您给出的示例具有紧密耦合的服务和控制器,这绝不是一件好事。一个干净的控制器会在其构造函数中接受一个服务接口,而不是在具体实现上做一个新的。

至于是否将CountryServiceandCountyService合并成 a CombinedService,决定很简单:

  • 如果您至少有一个客户端只使用其中一个而不使用另一个,请将它们分开
  • 将它们压在一起是所有客户组合使用它们
于 2016-11-08T21:53:52.457 回答
0

当您感觉到域级别的内聚时,紧密耦合是一个绝妙的主意。在 Eric Evans 的 DDD 书中,定义了术语Bounded Context 。这样想:两部分之间共享了多少信息/知识?如果它是一个相关的高百分比,您不妨将它们耦合起来,因为它们已经在域级别上。这也类似于 Larmans 对信息专家的 GRASP 定义。

更多关于这里的信息。

于 2016-11-08T18:21:24.263 回答