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