Нужен совет по ООП.
Есть основной класс в котором скопилось очень много кода, хочу его разгрузить, то есть разбить по возможности на отдельные классы.
Допустим, у меня есть логический кусок, который я выношу в отдельный класс, но в нем достаточно часто используются члены главного класса. И появляется проблема выбора способа доступа к этим членам. Для решения рассматриваю такие варианты:
(какую проблему вижу) повторный код, большой список аргументов (конструктор/метод)
this
(то есть мы будем получать ссылку на родителя) и по этой родительской ссылке юзать нужные поля(какую проблему вижу) На сколько я знаю, считается плохой практикой передавать ссылку на родителя в объекты. Экземпляр ничего не должен знать что происходит вверх по иерархии, манипуляции идут Только вниз по иерархии. Правильно?
Не вариант этот кусок кода оставлять на месте.
Работать будет и так и так, но как сделать лучше? I need the best practices.
Вероятно сама архитектура разделения не совсем удачно вами понимается. И на самом деле ваши классы все еще слишком "большие" (это по сути все-еще один класс, хоть и разделен в два файла).
Если возникает вопрос как же им делить совместные функции, значит их разделение не завершено и нужен еще и третий, и наверное четвертый и т.д. ... Каждый класс, как и метод, должен выполнять только одну функцию. Если это холдер, то он только отвечает за хранение и добавление/удаление данных. Если это фильтр, то он только фильтрует. Если это конвертер, то он только конвертирует.
А, вот если идет смешение функций - то вы пытаетесь вырастить "дракона", пусть и многоглавого, но эта зверюга сожрет ваше время и силы.
Выделяете больше классов. Они как и методы должны быть достаточно короткими и автономными. Представьте, что вы этот класс потом в другое приложение целиком запихнете, сможет ли оно там работать без переделок?
Одна функция = один класс, один класс = одна функция!
В данном случае было бы неплохо знать саму задачу, а не её решения. Думаю можно было бы сделать так, чтобы родительский класс использовал дочерние. Или вообще разбить логику на несколько классов. Как вариант Ваш Родительский класс и Дочерний могут стать классами представляющими какую-либо логику, а поля и данные которые используются Родительским и Дочерним классами можно выделить в отдельный класс. Но опять же все зависит от задачи.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Установил Помощник обновления системных драйверов от интел, он говорит, что видео драйвер стоит последнийИгрушки на компе работают, появилась...
Возник такой вопрос, допустим я построчно считываю csv файл,