我应该总是有一个单独的 "DataService" 来调用另一个服务吗?

Should I always have a separate "DataService" that make invokes another service?

我正在构建一个与其他微服务交互的新 RESTful 服务。

例行任务是从另一个 RESTful 服务中获取一些数据,对其进行过滤,将其与现有数据进行匹配,然后 return 做出响应。

我的问题是,始终将步骤 "get data" 和 "filter it" 分开在两个不同的 class 中是否是一个好的设计模式,其中一个是 EntityDataService 和第二个就是 EntityService?

例如,我可以调用一个服务,该服务 return 是一个国家列表,必须根据某些条件(如包含在欧盟中或创建日期等)进行过滤。

在这种情况下,哪个选项更好:

哪个更好?

我正在尝试遵循 KISS 模式,但也想让我的解决方案可维护和可扩展。

在具有大量数据的系统中,使用方法 getAllSomething 并不是一个好主意。

如果你没有很多数据,有它是可以的,但还是要小心。

如果你有 50 条记录,还不错,但如果你有数百万条记录,那就有问题了。

使用方法 getBySomeCriteriaServiceRepository 是更好的方法。

如果您有很多不同的查询要执行,那么您最终可能会使用很多方法:getByCriteria1getByCriteria2、...、getByCriteria50。此外,每次您需要不同的查询时,您都必须向 Service.

添加一个新方法

在这种情况下你可以使用Specification Pattern。这是一个例子:

public enum Continent { None, Europe, Africa, NorthAmerica, SouthAmerica, Asia }

public class CountrySpecification {

    public DateRange CreatedInRange { get; set; }
    public Continent Location { get; set; }
}

public class CountryService {

    public IEnumerable<Country> Find(CountrySpecification spec) {

        var url = "https://api.myapp.com/countries";
        url = AddQueryParametersFromSpec(url, spec);
        var results = SendGetRequest(url);
        return CreateCountryFromApiResults(results);
    }
}