Skip to content

Замечания по CurrentWork от 12.06.2017 #3

@QuickNickKoenig

Description

@QuickNickKoenig

AnimalsInfoApplication

  • Для получения Worker-а ты кастишь приложение к интерфейсу. Для получения Storage-а -- почему-то нет. Предлагаемое решение: приложение реализует интерфейс ModelProvider, который объявляет get-методы для тех моделей, что тебе необходимы.

AnimalStorage:

  • Уведомление об изменении контента происходит (внезапно) в read-методе.

DataBaseLoaderFunctions:

  • Ты совершаешь операции над животными -- и почему-то константы имеют суффикс USER.

SQLiteAnimalsDao:

  • Минорное замечание: оптимальней и безопасней прописывать раздельно selection и selectionArgs. ОК, тут повезло -- тут только айдишник. Завтра будет строка -- и простор для SQL-инъекции.
  • У тебя тип животного хранится как string (enumValue.toString()). Такое решение оказывается нестойким к обфускации. Предпочтительней enum-ы хранить как int-ы (enumValue.ordinal()).

AddNewAnimalActivity:

  • Название не указывает, что в активити может происходить редактирование животного.
  • Неожиданная и нестойкая логика определения режима "редактируемости" -- по наличию extras в интенте. Завтра тебе потребуется extra-информация в режиме добавления -- и логика поломается.
  • Нет смысла заводить переменную cachedAnimals только для того, чтоб её постоянно редактировать, не считывая после этого информацию (считываешь с неё информацию только 1 раз -- при вычитке Animal из интента).

DataBaseWorker:

  • При уведомлении у тебя может возникнуть состояние гонки. Во-первых, cachedData может измениться не только в loadUsers(). Во-вторых, одновременная запись и чтение callbackWeakReference из разных тредов может вызвать ошибку. В том числе, метод коллбэка onLoadFinished() может вызваться уже после того, как твой активити проставил слушатель null и уничтожился.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions