Я пытался максимально разделить свои классы на логические пакеты.
- Деятельность
- адаптеры (в основном адаптеры для просмотра списков)
- asynctasks (по большей части связь с сервером)
- core (содержит класс констант и базовое действие, которое содержит глобальные переменные, а также скользящее меню и панель действий)
- 1012 * фрагменты *
- интерфейсы (в основном интерфейсы шаблонов слушателя / наблюдателя, используемые для уведомления об успехе / неудаче асинхронной задачи или операции с базой данных)
- localsqlitedb (содержит класс sqlqueries, вспомогательный класс базы данных и другие связанные с БД классы)
- objects - содержит простые старые Java-объекты (pojos), представляющие различные сущности из моего приложения (пользователь, элемент пользователя, категория)
- утилиты - обработка изображений, отправители электронной почты, пользовательские тосты и т. Д.
Я думаю, что легко поддерживать и повторно использовать код, организованный таким образом
Я также использую соглашения об именах, чтобы с первого взгляда знать, что такое класс или файл
в папке раскладок:
activity_login.xml
activity_register.xml
dialog_delete_profile_confirmation.xml
в папке для рисования:
icon_feed.xml
icon_search.xml
images_loading_splash_screen.png
images_default_avatar.png
в пакете asynctasks
GetUserDataFromServerAsync.class
RegisterUserAsync.class
(поэтому, когда я ссылаюсь на них в коде, я знаю, что это не класс внутреннего обработчика, а класс, который связывается с сервером)