С архитекрутой?

Привет Хабр!



Я долго думал подходит ли этот вопрос сюда и в итоге пришел к выводу, что попробую. Так что ткните меня носом, если что не так.



Немного предыстории. Я студент магистратуры и то, чем я сейчас занимаюсь, редко требует красивых архитектурных решений в коде. Однако, так как само оно в голову мне не влезет, я пишу что-то сам, где пытаюсь внедрять то, что мне кажется правильным в жизнь.



Итак, ситуация такова. На данный момент, у меня есть архитектура куска приложения, которое я пишу в свободное время под андроид. Было бы очень-очень круто услышать мнение по поводу как минимум некоторых пунктов:

  • делается ли так;
  • проблемы подхода;
  • как делается правильно с вашей точки зрения;




Итак, собственно архитектура. Опишу словами, если что-то останется не понятным или вам необходима наглядность могу нарисовать или накидаться маленький примерчик кода.



У меня есть:

  • активити, суть которой я для себя определил как «контроллировать все».
  • некий классик Worker, который представляет собой некую умную очередь асинхронных событий.
  • три фрагмента (во ViewPager), которые делают одно единственное дело — рисуют UI и извещают через коллбеки активити, что что-то произошло.




С Worker'ом вроде проблем нет, там все понятно и логично. Мои проблемы (как мне кажется) в моем Гуе.



Эти три фрагмента, наследуются от абстрактрого класса, который наследуется от фрагмента и имплементит некоторые общие вещи, такие как onAttach() или конструктор.

Дальше. Помимо методов абстрактного класса, у этих фрагментов есть и свои методы. Таким образом, когда моя контроллирующая активити слышит, что где-то что-то происходит, она смотрит какой фрагмент сейчас активен (получая его как объект абстрактрого класса или вообще фрагмент), кастит его в конкретный класс, и вызывает необходимые функции в нем, чтобы поменять какой нибудь элемент гуя.



И вот именно это место у меня вызывает подозрение. Во первых, это не нравится Адроид студии, так как в итоге я объявляю объект конкретного класса. Во-вторых, я не знаю как это изменить и тут я уже начинаю нервничать на нему того нет ли у меня какой нибудь фундаментальной ошибки, сделав которую уже теперь ничего не исправишь не переписывая. Ну и плюс, я немного застрял в этой архитектуре. Когда придумал что-то одно, сложно посмотреть на это по-другому.



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

Или, как вариант, место на просторах сети, где можно почитать про нечто подобное тому, что я описал. Заранее спасибо.
  • Вопрос задан
  • 4605 просмотров
Решения вопроса 1
@Seter17
кастит его в конкретный класс


Вот это мне кажется действительно уже промах. И я думаю это и есть ваша фундаментальная ошибка. Суть множественного наследования от абстрактного класса (интерфейса) в том что бы уйти от конкретики и сделать все более абстрактным. Предположу, что часть методов ваших конкретных классов. которые вы вызываете после приведения можно объеденить в абстрактный метод Proceed(), например, в котором каждый будет иметь свою иерархию вызовов своей кучи методов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@xave
А что если не делать разные подклассы вашего ViewPager с разными методами, а создать один конкретный класс ViewPager и реализовать шаблон «Стратегия». В зависимости от события ваша активити передаст в полученный класс ViewPager экземпляр класса Strategy, реализующего алгоритм ConcreteStrategy для данного события.

У меня есть:
активити, суть которой я для себя определил как «контроллировать все».

А она не подпадает под описание God Object?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы