Как я могу организовать и уменьшить количество классов в своем приложении

Я предполагаю, что это больше вопрос шаблона проектирования, чем вопрос кодирования. Итак, начнем... У меня есть приложение для Android, содержащее множество классов и действий. У меня есть классы, сгруппированные внутри каталога в соответствии с их функциями, например: DownloadTask, ScanTask внутри каталога AsyncTask. Затем у меня есть все действия внутри каталога действий и так далее. Но я замечаю, что большая часть моего кода повторяется. Например, у меня есть 3 действия PingActivity, NetstatActivity, WhoisActivity, которые в основном выглядят одинаково с точки зрения кода. Единственная разница заключается в том, что они используют команду, например: ping host для PingActivity, netstat -ant для NetstatActivity и т. д. Все они создают экземпляры представлений из макета xml, который выглядит очень похоже, поскольку все, что у меня есть, это EditText, кнопка и TextView. А классы вызывают AsyncTask для выполнения фонового процесса отдельно от основного потока. За исключением WhoisActivity, которые используют службу rest API для запроса доменного имени. Итак, мой вопрос: как я могу упростить свой дизайн? могу ли я использовать один класс и передать команду или API в зависимости от того, какой пункт меню выбрал пользователь? Как мне это сделать? Спасибо

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

Code-Apprentice 28.05.2019 23:10

@Code-Apprentice Много кода для публикации, у меня есть как минимум 10 классов. Можно вместо этого разместить ссылку на github

miatech 28.05.2019 23:30

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

Code-Apprentice 28.05.2019 23:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Всего несколько предложений, по моему скромному мнению...

  • Сокращение количества классов никогда не должно быть самоцелью.
  • Несколько фрагментов кода, которые выглядят одинаково, на самом деле могут выполнять разные логические функции и могут развиваться совершенно по-разному в будущем (DRY — это знания, а не код).
  • Всегда проектируйте с учетом ТВЕРДЫЙ, когда вы говорите «могу ли я использовать один единственный класс и передать команду или API», это звучит хуже для принципов единой ответственности и открытого-закрытого.

Сказав это, если есть фрагменты кода, которые выглядят (и на самом деле) одинаковыми, попытайтесь выделить их в службы, которые внедряются в ваши классы. Просто сделайте нет, попытайтесь уменьшить сложность, поместив весь код, который выглядит похожим, в класс/метод с несколькими параметрами и некоторыми блоками if-else/switch, потому что в долгосрочной перспективе это обычно намного хуже, чем наличие множества маленьких и организованных классов. .

Другие вопросы по теме