Рефакторинг интерфейса службы Vertx - PullRequest
0 голосов
/ 25 февраля 2020

Я использую сервисы и генератор кода для управления интерфейсом к моей базе данных и выполнения запросов. Это действительно хорошо, мне нравится этот подход, но со многими запросами класс реализации очень длинный. Это мой интерфейс:

@ProxyGen
@VertxGen
public interface DatabaseService {

  @GenIgnore
  static DatabaseService create(MySQLPool dbClient, Handler<AsyncResult<DatabaseService>> readyHandler) {
    return new DatabaseServiceImpl(dbClient, readyHandler);
  }

  @GenIgnore
  static DatabaseService createProxy(Vertx vertx, String address) {
    return new DatabaseServiceVertxEBProxy(vertx, address);
  }

  // ====== DESKTOP ====== //

  @Fluent
  DatabaseService listNonPreviste(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addNonPreviste(String descr, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteNonPreviste(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService editNonPreviste(String id, String value, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteNonPreviste(String id, Handler<AsyncResult<Integer>> handler);

  @Fluent
  DatabaseService listModifiche(String anno, String mese, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addModifiche(String operatore, String motivazione, String campo, Handler<AsyncResult<Boolean>> handler);

  @Fluent
  DatabaseService listLavorazioni(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addLavorazioni(String descr, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteLavorazioni(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService editLavorazioni(String id, String value, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteLavorazioni(String id, Handler<AsyncResult<Integer>> handler);

  @Fluent
  DatabaseService listComponenti(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addComponenti(String descr, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteComponenti(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService editComponenti(String id, String value, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteComponenti(String id, Handler<AsyncResult<Integer>> handler);

  @Fluent
  DatabaseService listRelazioniComponenti(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService listNonRelazioniComponenti(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addRelazioniComponenti(String componente, String lavorazione, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteRelazioniComponenti(String componente, String lavorazione, Handler<AsyncResult<Boolean>> handler);

  @Fluent
  DatabaseService listOperatori(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addOperatori(String nome, String cognome, String ufficio, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteOperatori(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteOperatori(String id, Handler<AsyncResult<Integer>> handler);
  @Fluent
  DatabaseService editOperatori(String id, String field, String value, Handler<AsyncResult<Boolean>> handler);

  @Fluent
  DatabaseService listRelazioniOperatori(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService listNonRelazioniOperatori(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addRelazioniOperatori(String operatore, String componente, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteRelazioniOperatori(String operatore, String componente, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService totaleOreMeseOperatore(String id, String data, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService riassuntoGiornalieroOperatore(String id, String data, Handler<AsyncResult<JsonArray>> handler);

  @Fluent
  DatabaseService listCommesseAperte(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService listCommesseChiuse(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addCommessa(String codice, String descrizione, String matricola, String quantita, String conclusa, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteCommessa(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteCommessa(String id, Handler<AsyncResult<Integer>> handler);
  @Fluent
  DatabaseService editCommessa(String id, String field, String value, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService riassuntoCommessaOre(String commessa, String ufficio, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService riassuntoCommessaLavorazioni(String commessa, String lavorazione, String ufficio, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService riassuntoCommessaComponenti(String commessa, String componente, String ufficio, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService commessaLavorazioniOre(String commessa, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService commessaComponentiOre(String commessa, Handler<AsyncResult<JsonArray>> handler);

  @Fluent
  DatabaseService listOre(String mese, String anno, String officina, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addOre(List<String> params, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService addOreConID(List<String> params, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteOre(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService listOreNote(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService listOreNonpreviste(String id, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService editNote(String testo, String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService editOreNonPreviste(String nonprevId, String oraId, Handler<AsyncResult<Boolean>> handler);

}

Класс DatabaseServiceImpl реализует интерфейс и очень очень длинный. Есть ли способ «разделить» этот интерфейс? Или как-то иметь реализующий класс «меньший», потому что он становится очень большим.

Это все еще хорошо, потому что все логи базы данных c находятся в этих 2 файлах, поэтому логи БД c отделены от остальных, но классы становятся большими и их немного сложно поддерживать. Спасибо, я использую java 12


Я разделил интерфейс, например, следующим образом:

  @Fluent
  DatabaseService listNonPreviste(Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addNonPreviste(String descr, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService deleteNonPreviste(String id, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService editNonPreviste(String id, String value, Handler<AsyncResult<Boolean>> handler);
  @Fluent
  DatabaseService checkDeleteNonPreviste(String id, Handler<AsyncResult<Integer>> handler);

  @Fluent
  DatabaseService listModifiche(String anno, String mese, Handler<AsyncResult<JsonArray>> handler);
  @Fluent
  DatabaseService addModifiche(String operatore, String motivazione, String campo, Handler<AsyncResult<Boolean>> handler);

, потому что есть 2 логические единицы, называемые "Modifiche" и "Nonpreviste" ». Я хотел бы создать два класса Modifiche и Nonpreviste, которые реализуют только те методы, которые мне требуются.

1 Ответ

0 голосов
/ 10 мая 2020

Я не делю Интерфейс и его реализацию в том же случае, потому что тип хранилища может быть изменен и реализация тоже, но методы будут такими же. Просто разделите реализацию на команды.

DBImpls class {
  NonPrevisteCommands nonPrevisteCommands;
  ModificheComands modificheComands;
 ....

 DBImpls() {
  this.nonPrevisteCommands = new NonPrevisteCommands();
  this.modificheComands = new ModificheComands(); 
  ......
 } 

 DatabaseService listNonPreviste(Handler<AsyncResult<JsonArray>> handler){
  return this.nonPrevisteCommands.listNonPreviste(handler); 
 }

 DatabaseService addNonPreviste(String descr, Handler<AsyncResult<Boolean>> handler){
  return this.nonPrevisteCommands.addNonPreviste(descr, handler); 
 }
 .....

 DatabaseService listModifiche(String anno, String mese, Handler<AsyncResult<JsonArray>> handler) {
     return this.modificheCommands.listModifiche(descr, handler); 
 }
 ......
}
...