mardi 10 octobre 2017

Make application layer loosely coupled

I have a Java Spring-boot application which has layers(packages):

  • Controller(controller class)
  • Service (business logic)
  • Domain (database layer)

Inside My Domain I have two database classes

  • MysqlDBManager
  • MongoDBManager

I have many classes in my service package which uses methods of both MysqlDBManager as well as MongoDBManager.

If I use instances of MysqlDBManager' andMongoDBManager` on my service class directly then service layer will get tightly coupled with domain layer.

To solve this problem I have created a class named **DBManager** in my domain package which behaves as a proxy class which calls MysqlDBManager' andMongoDBManager` based on the use case internally.

Now service layer, instead of calling MysqlDBManager' andMongoDBManagerdirectly they callDBManager, which internally callsMysqlDBManager' and MongoDBManager.

Hence now my service class is not tightly coupled with domain layer.

Below are my classes which resembles 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 saveUserDocs mongoDBManager;

           public saveUserData(List<String> rows) {
             mysqlDBManager.saveUserData(rows);
           }

           public saveUserDocs(String docs) {
             mongoDBManager.saveUserDocs(docs);
           }
        }

Service class:

class Service {
    @Autowired 
    private DBManager dBManager;

    //....... code here
    dBManager.saveUserData(rows);
    dBManager.saveUserDocs(docs);
}

My Question is:

Is this (as explained above) a good way to make my application layers loosely coupled or their exist better ways to do this?

Aucun commentaire:

Enregistrer un commentaire