Соглашения об именах, специфичные для версии класса Java


10

Мне нужно создать адаптер между двумя программами (мех. Симуляция, не-cs). Предполагая, что у нас есть класс с именем ThatThing. Я должен обрабатывать различные реализации конкретного поставщика. Эти версии не имеют значимых имен (в отличие от гелий-затмений, индиго и т. Д.).

1. Как мне назвать класс, который должен выражать номер версии?

Я считаю , класс , как ThatThing_3_6_Impl, ThatThing_3_7_Implдовольно неудобно.

Ответы:


20

Используйте другое имя пакета.

com.example.version36.ThatThing
com.example.version37.ThatThing

Это позволяет вам хранить все «вещи» для конкретных версий вместе.

Apache Commons Lang использовал этот формат при выпуске своих переписанных версий 3.


Поскольку вы должны иметь возможность ссылаться на обе версии в одном классе, я бы сократил имена до:

ThatThing36
ThatThing37

В вашем случае, это кажется достаточно наглядным, и это устраняет уродливые Implи _.


Это звучит хорошо. Я подумаю об этом. Хотя в месте, где эти версии собираются вместе, нам нужно использовать полное имя для ссылок, верно?
user802421

Как они собираются вместе? Вы используете инъекцию зависимости? В любом случае, чтобы ответить на ваш вопрос, да.
Джереми Хейлер

У них есть много версий моделей данных, которые меняются между выпусками. Некоторые конкретные подмножества функций смешиваются вместе. Нет поддержки библиотеки вообще (например, нет ди, нет Codegen). Это история 11-летней эволюции программного обеспечения :(.
user802421

Печальный. Возможно ли, что version37.ThatThingудлинение version36.ThatThingуменьшит боль?
Джереми Хейлер

К сожалению, они структурно отличаются и нуждаются в сложной трансформации. Это как растровая и векторная графика.
user802421

2

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

Вы можете использовать ThatThing3_6для "That Thing 3.6".

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.