我应该总是有一个单独的 "DataService" 来调用另一个服务吗?
Should I always have a separate "DataService" that make invokes another service?
我正在构建一个与其他微服务交互的新 RESTful 服务。
例行任务是从另一个 RESTful 服务中获取一些数据,对其进行过滤,将其与现有数据进行匹配,然后 return 做出响应。
我的问题是,始终将步骤 "get data" 和 "filter it" 分开在两个不同的 class 中是否是一个好的设计模式,其中一个是 EntityDataService
和第二个就是 EntityService
?
例如,我可以调用一个服务,该服务 return 是一个国家列表,必须根据某些条件(如包含在欧盟中或创建日期等)进行过滤。
在这种情况下,哪个选项更好:
- separate
CountryDataService
class 只有一种方法
getAllCountries
和过滤它们的 EUCountryService
- 用 public 方法制作一个 class
CountryService
getEUCountries
和
getCountriesCreatedInDateRange
和私人 getAllCountries
哪个更好?
我正在尝试遵循 KISS
模式,但也想让我的解决方案可维护和可扩展。
在具有大量数据的系统中,使用方法 getAllSomething
并不是一个好主意。
如果你没有很多数据,有它是可以的,但还是要小心。
如果你有 50 条记录,还不错,但如果你有数百万条记录,那就有问题了。
使用方法 getBySomeCriteria
的 Service
或 Repository
是更好的方法。
如果您有很多不同的查询要执行,那么您最终可能会使用很多方法:getByCriteria1
、getByCriteria2
、...、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);
}
}
我正在构建一个与其他微服务交互的新 RESTful 服务。
例行任务是从另一个 RESTful 服务中获取一些数据,对其进行过滤,将其与现有数据进行匹配,然后 return 做出响应。
我的问题是,始终将步骤 "get data" 和 "filter it" 分开在两个不同的 class 中是否是一个好的设计模式,其中一个是 EntityDataService
和第二个就是 EntityService
?
例如,我可以调用一个服务,该服务 return 是一个国家列表,必须根据某些条件(如包含在欧盟中或创建日期等)进行过滤。
在这种情况下,哪个选项更好:
- separate
CountryDataService
class 只有一种方法getAllCountries
和过滤它们的EUCountryService
- 用 public 方法制作一个 class
CountryService
getEUCountries
和getCountriesCreatedInDateRange
和私人getAllCountries
哪个更好?
我正在尝试遵循 KISS
模式,但也想让我的解决方案可维护和可扩展。
在具有大量数据的系统中,使用方法 getAllSomething
并不是一个好主意。
如果你没有很多数据,有它是可以的,但还是要小心。
如果你有 50 条记录,还不错,但如果你有数百万条记录,那就有问题了。
使用方法 getBySomeCriteria
的 Service
或 Repository
是更好的方法。
如果您有很多不同的查询要执行,那么您最终可能会使用很多方法:getByCriteria1
、getByCriteria2
、...、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);
}
}