OOP紧耦合。我什么时候该做?

时间:2016-11-08 18:15:11

标签: c# asp.net oop tightly-coupled-code

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

2 个答案:

答案 0 :(得分:0)

当您感知域级别的内聚时,紧耦合是一个很好的主意。在Eric Evans的书DDD中,术语Basil Bourque states被定义。 以这种方式思考:两部分之间共享多少信息/知识?如果它是相对较高的百分比,您可以将它们结合起来,因为它们已经在域级别上。 这也与Larmans的GRASP信息专家定义有关。

有关此Bounded Context的更多信息。

答案 1 :(得分:0)

首先,请确保您正在谈论CountryServiceCountyService之间的紧密耦合,您的控制器和服务之间的紧密耦合。

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

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

  • 如果您的至少一个客户端只使用其中一个客户端而不是其他客户端
  • ,请将它们分开
  • 将所有客户合并使用