【发布时间】:2017-10-10 17:00:37
【问题描述】:
我有一个 Java Spring-boot 应用程序,它有层(包):
- 控制器(控制器类)
- 服务(业务逻辑)
- 域(数据库层)
在我的Domain 里面我有两个数据库类
- MysqlDBManager
- MongoDB 管理器
我的service package 中有很多类,它们使用MysqlDBManager 和MongoDBManager 的方法。
如果 我直接在我的服务类上使用MysqlDBManager' andMongoDBManager`的实例,那么服务层将得到紧密耦合 带有 域 层。
为了解决这个问题,我在我的 domain 包中创建了一个名为 **DBManager** 的类,它充当代理类,它根据内部用例调用 MysqlDBManager' andMongoDBManager`。
现在服务层,而不是调用MysqlDBManager' andMongoDBManagerdirectly they callDBManager, which internally callsMysqlDBManager'和MongoDBManager。
因此,现在我的服务类与域层没有紧密耦合。
以下是类似于我的用例的类。
MongoDBManager 类:
Class MongoDBManager {
public saveUserDocs(String docs) {
//.....
}
}
MysqlDBManager 类:
Class MysqlDBManager {
public saveUserData(List<String> rows) {
//.....
}
}
DBManager 类:
Class DBManager {
@Autowired
private MysqlDBManager mysqlDBManager;
@Autowired
private MongoDBManager mongoDBManager;
public saveUserData(List<String> rows) {
mysqlDBManager.saveUserData(rows);
}
public saveUserDocs(String docs) {
mongoDBManager.saveUserDocs(docs);
}
}
服务类:
class Service {
@Autowired
private DBManager dBManager;
//....... code here
dBManager.saveUserData(rows);
dBManager.saveUserDocs(docs);
}
我的问题是:
这是(如上所述)使我的应用程序层松散耦合的好方法,还是它们存在更好的方法来做到这一点?
【问题讨论】:
-
始终遵循 SOA(面向服务的架构)使应用层松散耦合。
-
看看“命令模式”
标签: java spring oop design-patterns architecture