Рекомендации по шаблону для загрузки данных из разных источников на основе логики - PullRequest
3 голосов
/ 14 марта 2012

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

Проблема:

Загрузка данных из нескольких разных источников в определенном порядке в один большой JavaBean. Данные загружаются на основе некоторых простых начальных критериев. Данные, возвращаемые из первого источника, будут строить критерии для следующего источника.

Возможно, что никакие данные не могут быть возвращены из определенных источников данных. Это не может остановить процесс загрузки в JavaBean, но, исходя из некоторой логики, процесс загрузки может пропускать определенные источники данных, поскольку у него недостаточно критериев для запроса.

Текущее решение:

BigJavaBean Class

Каждый класс загрузчика содержит методы для доступа к каждому источнику DAO

Запросы к каждому DAO строятся из атрибутов в BigJavaBean

В каждом классе загрузчика есть логика, чтобы определить, "загружен" он или нет

LoaderClassDataBase for BigJavaBean

LoaderClassFlatFiles for BigJavaBean

LoaderClassXmlFiles for BigJavaBean

LoaderClassWebService for BigJavaBean

... and so on

MainLogicClass

  BigJavaBean bigJavaBean = new BigJavaBean();

  populateBigBeanMethod() {

   loaderClassDataBase(bigJavaBean);

   if (loaderClassDataBase.isLoaded()) {
      loaderClassFlatFiles(bigJavaBean);

       if (loaderClassFlateFile.isLoaded() {
            loaderClassXmlFiles(bigJavaBean);
         }
   }

   ... more if statements


}

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2015

Это шаблон цепочки ответственности

abstract class BigJavaBeanLoader {
    private final BigJavaBeanLoader successor;

    public BigJavaBeanLoader() {
        this.successor = null;
    }

    public BigJavaBeanLoader(BigJavaBeanLoader successor) {
        this.successor = successor;
    }

    public void loadData(BigJavaBean bean) {
        if (this.loadDataFromSource(bean) && this.successor != null) {
            this.successor.loadData(bean);
        }
    }

    protected abstract boolean loadDataFromSource(BigJavaBean bean);

    class DataBase extends BigJavaBeanLoader {
        @Override
        protected boolean loadDataFromSource(BigJavaBean bean) {
            // do a database stuff
            return true;
        }
    }

    class FlatFiles extends BigJavaBeanLoader {
        @Override
        protected boolean loadDataFromSource(BigJavaBean bean) {
            // do flat files stuff
            return true;
        }
    }

}

BigJavaBean bigJavaBean = new BigJavaBean();
BigJavaBeanLoader loader;
loader = new BigJavaBeanLoader.FlatFiles();
loader = new BigJavaBeanLoader.DataBase(loader);
loader.loadData(bebigJavaBean);
1 голос
/ 03 апреля 2012

Для меня это крик о шаблоне состояния (есть более чистые реализации, чем этот, но мне не хватило кофе).

public abstract class LoaderState {
  private BigBean bean;
  public LoaderState(BigBean b) { this.bigBean = b; }
  public abstract LoaderState getNextLoader();
  public abstract void loadData();
  class DatabaseLoaderState extends LoaderState {
    public void loadData() { //do some stuff }
    public LoaderState getNextLoader() {
      if (iHadSomeData) return new FlatFileLoaderState(bigBean);
      return new SomeOtherLoaderState(bigBean); //or return null if nothing else to do
    }
  }

}

LoaderState state = new LoaderState.DatabaseLoaderState(new BigBean());
do {
  state.loadData();
  state = state.getNextLoader();
} while (state != null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...