2013-09-14 2 views
0

В моем офисе мы работаем с Java, Apache Wicket. Теперь те, кто знаком с Wicket, могут узнать об аннотации SpringBean. Для тех, кто этого не делает, вы можете подумать об этом как о способе Уикета пообщаться с Весной. Когда класс наследует класс калитки, такой как WebPage или Panel, зависимости пружин автоматически вводятся. Но есть способ, чтобы конкретно сказать Spring, чтобы ввести зависимость, если это не подкласс компонента калитки который
Можно ли наследовать классы в java, даже если это не предназначено для этой работы

Injector.get().inject(this); 

Он работает как швейцарский нож.

Теперь давайте перейдем к делу. Недавно я увидел, что мой коллега работает над классом, который работает с базами данных (и абсолютно независим от калитки), он жаловался на получение NullPointer, я сказал ему, что он использовал аннотацию SpringBean &, так как он не использовал класс калитки - родительский класс, он должен был рассказать весну об инъекции или использовать швейцарский нож.

Вместо этого он просто сделал класс расширенным классом WebPage, который представляет собой веб-страницу. Когда я сказал ему, что это не правильно, поскольку класс не имеет ничего общего с классом WebPage, он сказал, что все в порядке, поскольку оно заставило это работать, и он также будет использовать его везде.

Вопрос в том, правильно ли продлить класс, даже если он не предназначен для этого материала?

+2

Объясните своему коллеге, какое замечательное развлечение у него будет, если ему когда-либо придется пересмотреть этот проект после перерыва. –

+3

Если у вашей компании есть обзоры кода, расскажите об этом другим старшим. Практика нарушения конвенции для «просто работающего» кода - очень и очень страшный прецедент. – Makoto

+0

У нас есть обзоры один на один с нашим боссом, так как мы являемся стартапом, увидим, что я могу сделать – lazyprogrammer

ответ

4

Класс должен распространяться только в том случае, если он имеет «является« отношениями с классом. Хорошее объяснение «является» отношениями взяты из http://www.w3resource.com/java-tutorial/inheritance-composition-relationship.php#sthash.sOckIrpz.dpuf

В объектно-ориентированном программировании, понятие IS-A является полностью основано на наследование, которое может быть два типов наследование классов или наследования интерфейса. Это точно так же, как сказать: «A - это тип B вещь». Например, Apple - это плод, автомобиль - это автомобиль и т. Д. Наследование однонаправлено. Например, Дом - это здание. Но Здание не Дом.

+0

Спасибо, может быть, я могу убедить его правильно подойти к проблеме, а не расширять классы, не задумываясь .. – lazyprogrammer

1
class Fruit{ 

} 

class Apple extends Fruit{ 
    //as it is a fruit 
} 

class Potato extends Fruit{ 
    //No it is not a fruit so it should not extend it 
} 
+0

короткий и точный пример ....спасибо – lazyprogrammer

+0

Рад помочь :) –

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^