Добавить изменение в устаревший код - PullRequest
2 голосов
/ 05 июля 2010

У нас устаревшая система состоит из классов А, В и С. А ужасна и велика.Как и Б. И С тоже !!(Это признано внутри компании, и мы пытаемся пересмотреть их в будущем).

Более страшная вещь - это то, что А и В расширяют С, чего они на самом деле не должны, поскольку на самом деле это не одно и то же.Разработчик (назовите его X), который сделал кодирование, признал, что он сделал это таким образом, чтобы A и B могли использовать «НЕКОТОРЫЕ» методы C!

Теперь клиент хочет обновить устаревшую системуизменение требует, чтобы я добавил одно и то же изменение в A и B. То, что я могу сделать, это добавить изменение в C, чтобы A и B могли его видеть.Но если я сделаю это, я буду делать то же самое, что и X.

Я имею в виду написать другой класс D, чтобы A и B могли иметь собственный D и получать изменения.Как вы думаете?

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

Сара

Ответы [ 3 ]

4 голосов
/ 05 июля 2010

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

1 голос
/ 05 июля 2010

Трудно дать однозначный ответ на вопрос, сформулированный в таких общих терминах.

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

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

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

0 голосов
/ 05 июля 2010

Сара,

Трудно дать конкретный совет, не зная точных отношений между А, В и С. Я собираюсь предположить, что А и В должны быть в некотором роде похожими, если они требуютточно такое же изменение.Таким образом, предполагая, что A и B похожи, но отличаются от C, вы можете выполнить следующее:

  1. Создайте родительский класс D, из которого выходят как A, так и B.Этот родительский элемент содержит функции, которые совместно используют A и B (которые вы планируете изменить).
  2. Либо создайте отдельный класс, который содержит функции A, B и C, и у экземпляров C и D есть его экземпляр.ИЛИ создайте другой родительский класс, E, для C и D, который содержит функции, общие для A, B и C.

Опять же, мой совет может оказаться недействительным, если мои предположения неверны,Могли бы вы дать нам лучшее представление о том, как связаны A, B и C?

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