#java #eclipse #performance #architecture #interface
#java #затмение #Производительность #архитектура #интерфейс #eclipse
Вопрос:
Предположим два разных сценария:
- а) Каждый (сервисный) класс X имеет интерфейс
X
и ровно одну реализациюXImpl
. Любой другой (сервисный) класс (напримерYImpl
) всегда взаимодействует с другими (сервисными) классами через интерфейс (X
), но никогда напрямую не ссылается на класс реализации (XImpl
) — это, по крайней мере, очень распространенный шаблон. - б) Точно так же, как а) но без всех интерфейсов. Есть только
XImpl
иYImpl
это относится непосредственно кYImpl
.
(Я предполагаю, что знаю много целей a)
и b)
, поэтому, пожалуйста, не обсуждайте это здесь.)
Мой вопрос: оказывает ли вариант b) отрицательное влияние на производительность при работе с Eclipse, Maven и M2E 1.0?
Я могу себе это представить, потому что у вас есть способ a)
, и вы что-то редактируете в XImpl
, это не влияет YImpl
, потому что они полностью разделены интерфейсом X
. Но при удалении интерфейсов в b)
, чтобы они больше не были разъединены.
Комментарии:
1. Могут возникнуть дополнительные накладные расходы из-за вызовов
invokeInterface
vsinvokeSpecial
(как опубликовал JB Nizet, это порядка нескольких микросекунд), но я считаю, что HotSpot может оптимизировать сценарий 1 на 1 (если бы у меня были ссылки на cite, я бы опубликовал это как ответ вместо комментария). Использование или неиспользование интерфейсов должно диктоваться соображениями архитектуры и ремонтопригодности. Ими легко злоупотреблять, но у них есть свое место.2. @Barend Garvelink: показатели производительности во время выполнения ясны, суть вопроса не в этом. И да, это касается архитектуры, потому что, по крайней мере, для интерфейсов не осталось других требований, поэтому я меньше всего боюсь, что редактор вызовет проблемы.
3. О, я недостаточно хорошо прочитал вопрос, извините.
4. @meriton: это более общий вопрос об архитектуре. Но в конкретном случае это примерно от 50 до 100 этих сервисов. Но полная база кода составляет от 500 до 1000 классов в полном проекте eclipse плюс от 150 до 200 внешних jar. Эти 50-100 сервисов работают немного как центральные классы, поэтому они ссылаются на множество других классов.
Ответ №1:
Вы не хотите жертвовать дизайном своего приложения, чтобы получать 2 микросекунды каждый раз, когда Eclipse или Maven компилируют ваши классы. Кстати, если вы редактируете XImpl, он должен проверить, что он по-прежнему соблюдает контракт интерфейса X, который используется YImpl, поэтому, вероятно, это не имеет никакого значения.
Комментарии:
1. «если вы редактируете XImpl, он должен проверить, что он по-прежнему соблюдает контракт интерфейса X, который используется YImpl». Да, но тогда это может прекратиться. Если интерфейса нет, я не знаю, где Eclipse останавливает процесс проверки или, по крайней мере, имеет ли это заметное значение.