Java 我是否应该始终有一个单独的;“数据服务”;make调用另一个服务?
我正在构建一个与其他微服务交互的新的RESTful服务 例行任务是从另一个RESTful服务获取一些数据,对其进行过滤,将其与现有数据进行匹配,然后返回响应 我的问题是,在两个不同的类中始终将“获取数据”和“过滤数据”这两个步骤分开,并将其中一个命名为Java 我是否应该始终有一个单独的;“数据服务”;make调用另一个服务?,java,design-patterns,microservices,software-design,Java,Design Patterns,Microservices,Software Design,我正在构建一个与其他微服务交互的新的RESTful服务 例行任务是从另一个RESTful服务获取一些数据,对其进行过滤,将其与现有数据进行匹配,然后返回响应 我的问题是,在两个不同的类中始终将“获取数据”和“过滤数据”这两个步骤分开,并将其中一个命名为EntityDataService,第二个简单地命名为EntityService,这是一种好的设计模式吗 例如,我可以调用一个服务,该服务返回一个国家列表,这些国家必须根据某些条件进行筛选,如是否包含在欧盟或创建日期等 在这种情况下,哪个选项更好:
EntityDataService
,第二个简单地命名为EntityService
,这是一种好的设计模式吗
例如,我可以调用一个服务,该服务返回一个国家列表,这些国家必须根据某些条件进行筛选,如是否包含在欧盟或创建日期等
在这种情况下,哪个选项更好:
- 分离只有一个方法的
类CountryDataService
和过滤它们的getAllCountries
EUCountryService
- 使用公共方法创建一个类
,并CountryService
和privategetCountriesCreatedInDateRange
getAllCountries
我试图遵循
KISS
模式,但也希望使我的解决方案具有可维护性和可扩展性。在具有大量数据的系统中,使用方法getAllSomething
并不是一个好主意
如果你没有太多的数据,也可以拥有,但还是要小心
如果你有50张唱片,也没那么糟糕,但如果你有数百万张唱片,那就成问题了
使用方法getBySomeCriteria
的服务
或存储库
是更好的选择
如果您有许多不同的查询需要执行,那么您可能会得到许多方法:getByCriteria1
,getByCriteria2
,…,getByCriteria50
。此外,每次需要不同的查询时,都必须向服务添加新方法
在这种情况下,您可以使用。下面是一个例子:
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);
}
}
公共枚举大陆{无、欧洲、非洲、北美洲、南美洲、亚洲}
公共类规范{
公共日期范围CreatedInRange{get;set;}
公共位置{get;set;}
}
公共服务{
公共IEnumerable查找(CountrySpecification){
变量url=”https://api.myapp.com/countries";
url=AddQueryParametersFromSpec(url,spec);
var results=SendGetRequest(url);
返回CreateCountryFromApiResults(结果);
}
}
我明白了,但你回答的问题略有不同。我的新服务不与数据库交互,只通过另一个服务公开的API从数据库中获取数据。这只是一个示例,说明了如何对数据库使用规范。。您可以在API中使用相同的想法。您可以将参数添加到API中,并使用与规范相同的代码。我将编辑我的答案以使用RESTful api而不是DB