Именование игр в Android
Я столкнулся со все новыми ипостасями между действиями Android и другими классами. Мне было интересно, можете ли вы рассказать мне, как вы их избегаете. К сожалению, мои конкретные проблемы с именами не рассматриваются в связанных вопросах SO.
Первый пример
У меня есть активность, которая отображает уровень игры. Однако данные, требуемые для этого уровня (фоновое изображение, объекты и т.д.), Хранятся в отдельном классе. Естественно, я бы назвал последний класс Level
. Однако я бы назвал активность Level
, потому что он отображает уровни.
Второй пример
У меня есть активность, которая воспроизводит сцену. Он в основном отображает несколько изображений подряд. Информация о том, какое изображение отображается в течение долгого времени в отдельном классе. Как и в предыдущем случае, я, естественно, вызывал бы оба класса CutScene
.
Как бы вы решали эти проблемы с именами? Назовите действия LevelActivity
и CutSceneActivity
? Назовите классы представления LevelModel
и CutSceneModel
? Что-то еще?
Ответы
Ответ 1
Я решаю эти проблемы с помощью классов prefixing или postfixing с их "типом", как вы сказали в конце своего вопроса:
-
LevelActivity
, GameActivity
, MainActivity
,...
-
CommentsListAdapter
,...
-
CheckNewCommentsService
,...
- и т.д.
Но я вообще делаю execption для классов модели, которые являются объектами, которые содержат эти данные: я бы все же назвал класс модели уровня Level
, а не LevelModel
, чтобы указать, что я манипулирую и работаю с, уровень.
Другим решением (дольше типа ^^) может быть использование полностью квалифицированных имен (см. здесь) при обращении к вашим классам:
-
com.something.yourapp.activity.Level
-
com.something.yourapp.model.Level
При этом вы всегда знаете, какой класс действительно используется.
Ответ 2
В общем, лучший способ назвать компоненты приложения Android - добавить его "тип компонента" в качестве суффикса.
Пример: -
-
LevelActivity
(LevelActivity расширяет действие)
-
InboxUpdateService
(InboxUpdateService расширяет сервис)
-
ContactsContentProvider
(ContactsContentProvide расширяет ContentProvider)
-
SMSBroadcastReceiver
(SMSBroadcastReceiver расширяет BroadcastReceiver)
Именованием с использованием вышеуказанного метода будут минимальные шансы потерять трек, когда вы будете работать с большим потоком кода с большим количеством похожих имен в своем приложении.
Итак, назовите свои действия суффиксом "Активность".
И назовите класс, который предоставляет данные для вашей LevelActivity как Level
.
В противоречии со второй частью ответа Паскаля МАРТИНА вы также можете использовать LevelActivity
и LevelInfo
вместе. Потому что они предлагают четкую разницу, как указано ниже:
Различать имена таким образом, чтобы читатель знал, что предложения о различиях Роберт. C. Мартин, автор Очистить код
Но суффикс часто избыточен по когнитивной основе. Использование только слова Level
четко подчеркивает, что класс Level
предлагает информацию о Уровне.
Итак, используйте Level
для класса, который предоставляет данные о Уровне.
ПРИМЕЧАНИЕ. Если вы используете суффиксы, выберите одно слово для каждой концепции.
Например: если вы используете суффиксу Info
для идентификации классов, которые предлагают информацию, то во всех приложениях следует использовать только Info
(не Data
или Model
), чтобы избежать путаницы.