【发布时间】:2017-10-18 12:05:05
【问题描述】:
我正在使用 grails 3.3.0 和 spring-boot 1.5.6.RELEASE 构建一个 spring-boot + grails 应用程序
我有控制器向消费者客户端应用程序提供 JSON 数据。
ExampleController.groovy
class ExampleCotnroller {
def endpointServerJosn(){
}
}
最近又引入了一个消费者,它期望类似的 JSON 数据来自不同的来源。
所以我在 application.yml another.client=true 中添加了一个标志,并将我的控制器修改为:
更新了 ExampleController.groovy
class ExampleCotnroller {
def endpointServerJosn(){
if(another.client){
//server data from this client's source
}else{
//server data from other client's source
}
}
}
但是我期待更多的客户端,这会弄乱我的控制器,因为我发现我的解决方案无法通过设计进行扩展。这里每个客户端都有自己的从 API 控制器来获取数据。
client 1 发送请求 -> master(我的控制器)拦截,调用一个 或更多与客户端相关的从属 API,获取数据并聚合它 并将数据发回
同样,客户端 2 发送请求 -> 主控(我的控制器) 拦截、调用与客户端2相关的一个或多个从属API
我正在考虑有一个抽象控制器,例如:
class AbstractApplicationController{
def endpointServerJson();
}
class FirstCilentController extends AbstractApplicationController {
}
class SecondClientController extends AbstractApplicationController {
}
是否可以通过上述设计实现可扩展的解决方案?应用程序可以根据 external yml 或 application.yml 文件中的配置选择首选哪个控制器吗?
【问题讨论】:
标签: spring grails spring-boot design-patterns