Рефакторинг устаревшего кода - реализация интерфейса java - используются неинтерфейсные методы - PullRequest
0 голосов
/ 10 января 2020

Я рефакторинг некоторого унаследованного кода, и я застрял в дилемме.

Некоторый контекст, касающийся базы кода. Это веб-сайт панели мониторинга, на котором можно настроить мониторинг некоторых служб. Его можно использовать в двух режимах.

  1. Stati c:
    1. Конфигурации для служб, которые необходимо отслеживать, хранятся в файле для чтения. только хранилища данных, например: текст, БД только для чтения.
    2. Услуги по подключению выполняются автоматически при запуске
    3. Гиперссылки на динамически встроенные новые службы и редактирование существующих служб закрыты, и контроллеры не загружают страницы.
  2. Dynami c:
    1. Конфигурации для служб, которые необходимо отслеживать, хранятся в Хранилище данных для чтения и записи, например: SQL, онлайн-хранилища данных и т. д. c.
    2. Услуги по загрузке выполняются вручную после запуска на странице регистрации.
    3. Гиперссылки Динамически встроенные новые сервисы и редактирование существующих сервисов открыты и доступны.

Я хочу реорганизовать следующее.

interface Interface {
  def getX()
  def getY()
}

class StaticImpl implements Interface {
  @implement def getX(): some impl
  @implement def getY(): some impl
}

class DynamicImpl extends StaticImpl {
  def putX(x): some impl ( not in interface )
  def putY(y): some impl ( not in interface )
}

@Bean
Interface bean1 = if dynamic: DynamicImpl() else: StaticImpl()

@Bean
DynamicImpl bean2 = DynamicImpl()

bean1 используется для действий, которые могут быть вызваны во время stati c и dynamic * 1 058 * mode

bean2 используется для действий, которые вызываются только во время Dynami c mode

У меня есть две идеи на данный момент

  1. переместите putX, putY в интерфейс и оставьте пустую реализацию в StaticImpl, т.е. они ничего не делают
  2. создают новый интерфейс для putX, putY и делают bean2 нулевым в режиме stati c.

Я хотел бы знать, если это хорошо, или есть ли другой способ реорганизации этого.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 января 2020

bean2 кажется плохой идеей для начала, потому что она создает зависимость от конкретной реализации, нарушая принцип обращения зависимостей .

Объединение операций чтения / записи в одну Интерфейс нарушает Принцип разделения интерфейса , поскольку у вас есть клиенты, которые зависят от одной операции, но не от другой.

Кажется очевидным, что вам нужен второй интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...