I have a Java Spring-boot application that has layers ( packages ) in it:
- Controller (controller class)
- Service (business logic)
- Domain (database level)
Inside My Domain I have two database classes
- Mysqldbmanager
- MongoDBManager
I have many classes in my service package , which uses both the MysqlDBManager and MongoDBManager .
If I use instances of MysqlDBManager' and MongoDBManager` in my service class, the service will be closely related to the domain level.
To solve this problem, I created a class called **DBManager** in my domain package, which behaves like a proxy class that calls MysqlDBManager' and MongoDBManager` based on internal usage.
Now the service layer, not the call MysqlDBManager' and MongoDBManager directly they call DBManager , which internally calls MysqlDBManager' and MongoDBManager .
Therefore, now my class of service is not closely related to the domain layer.
Below are my classes, similar to my use case.
MongoDBManager class:
Class MongoDBManager { public saveUserDocs(String docs) {
MysqlDBManager Class:
Class MysqlDBManager { public saveUserData(List<String> rows) {
DBManager class:
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 of service:
class Service { @Autowired private DBManager dBManager;
My question is :
Is this (as explained above) a good way to make application layers loosely coupled, or are there better ways to do this?