Привет Хабр!
Я долго думал подходит ли этот вопрос сюда и в итоге пришел к выводу, что попробую. Так что ткните меня носом, если что не так.
Немного предыстории. Я студент магистратуры и то, чем я сейчас занимаюсь, редко требует красивых архитектурных решений в коде. Однако, так как само оно в голову мне не влезет, я пишу что-то сам, где пытаюсь внедрять то, что мне кажется правильным в жизнь.
Итак, ситуация такова. На данный момент, у меня есть архитектура куска приложения, которое я пишу в свободное время под андроид. Было бы очень-очень круто услышать мнение по поводу как минимум некоторых пунктов:
- делается ли так;
- проблемы подхода;
- как делается правильно с вашей точки зрения;
Итак, собственно архитектура. Опишу словами, если что-то останется не понятным или вам необходима наглядность могу нарисовать или накидаться маленький примерчик кода.
У меня есть:
- активити, суть которой я для себя определил как «контроллировать все».
- некий классик Worker, который представляет собой некую умную очередь асинхронных событий.
- три фрагмента (во ViewPager), которые делают одно единственное дело — рисуют UI и извещают через коллбеки активити, что что-то произошло.
С Worker'ом вроде проблем нет, там все понятно и логично. Мои проблемы (как мне кажется) в моем Гуе.
Эти три фрагмента, наследуются от абстрактрого класса, который наследуется от фрагмента и имплементит некоторые общие вещи, такие как onAttach() или конструктор.
Дальше. Помимо методов абстрактного класса, у этих фрагментов есть и свои методы. Таким образом, когда моя контроллирующая активити слышит, что где-то что-то происходит, она смотрит какой фрагмент сейчас активен (получая его как объект абстрактрого класса или вообще фрагмент), кастит его в конкретный класс, и вызывает необходимые функции в нем, чтобы поменять какой нибудь элемент гуя.
И вот именно это место у меня вызывает подозрение. Во первых, это не нравится Адроид студии, так как в итоге я объявляю объект конкретного класса. Во-вторых, я не знаю как это изменить и тут я уже начинаю нервничать на нему того нет ли у меня какой нибудь фундаментальной ошибки, сделав которую уже теперь ничего не исправишь не переписывая. Ну и плюс, я немного застрял в этой архитектуре. Когда придумал что-то одно, сложно посмотреть на это по-другому.
В общем, если вы все еще это читаете и у вас есть тяга помогать таким вот людям как я, то я был бы вам очень признателен за критику того, что у меня уже есть и предложения как это можно улучшить/изменить.
Или, как вариант, место на просторах сети, где можно почитать про нечто подобное тому, что я описал. Заранее спасибо.