212 похожих чатов

Привет! Возник вопрос по ооп, поэтому пишу сюда) Есть 2 класса: 1.

СтарыйОтчет
2. НовыйОтчет

В каждом много полей, пусть 10.
НовыйОтчет создается из СтарыйОтчет путем некоторой модификации полей.

Вопрос. Как это сделать? Нормально ли передать старый отчет в конструктор нового отчета и там присвоить поля после соответствующей модицикации?

11 ответов

3 просмотра

Именованный конструктор или перегрузка дкфолтного конструктора если есть в языке

из наводящих вопросов - а из этих 10-ти полей они все одинаковые? какой процент должны отличаться? Что это за поля? Почему они отличаются? Возможно есть набор полей которые по смыслу можно объединить в отдельный тип. К чему вопрос - если это два разных класса, значит что бы "можно было засэтать в конструкторе" у другого класса будет так или иначе какое-то представление о внутренней структуре первого класса. И вопрос почему это разные классы в целом.

Два варианта - либо конструктор, либо фабричный метод (или сервисный метод), создающий новый отчет из старого. Выбор зависит от: - связаны ли эти два отчета по бизнесу? - работают ли с новым отчетом, если соответствующий старый отчет не существует? - будет ли старый отчет в будущем удален из системы?

Rostislav-Teryaev Автор вопроса
Sergey P
из наводящих вопросов - а из этих 10-ти полей они ...

НовыйОтчет - это скорее нечто совершенно другое, нежели старый. И поля нового получаются где-то через какую-то модификацию полей старого, где-то 1 в 1 переходят. Эти старые новые отчеты вообще разные типы отчетов. Не просто старый новый на самом деле а именно бизнесовый смысл разный - они должны быть разными. Да, у нового есть представление о структуре старого

Rostislav-Teryaev Автор вопроса
Sergey Alaev
Два варианта - либо конструктор, либо фабричный ме...

По бизнесу связаны С новым работают, если старый не существует Да, старый отчет будет удален

Rostislav Teryaev
По бизнесу связаны С новым работают, если старый н...

тогда NovyOtchetFromStaryOtchetConversionService. тогда модель нового отчета и код, который работает с новым отчетом, не будет знать о старом отчете и тогда удаление старого отчета пройдет максимально безболезненно.

Но у тебя появляется процедура которая знает об обоих, зачем? Удобнее тестить? Нет. Удобнее менять? Нет

Sergey P
Но у тебя появляется процедура которая знает об об...

Удобно херануть разом все штуки завязанные на старый отчёт, и ничего нигде не сломать

Sergey P
Но у тебя появляется процедура которая знает об об...

в идеале, это должно быть единственное место, которое знает об обоих. Лучше изоляция, проще зависимости.

Sergey Alaev
в идеале, это должно быть единственное место, кото...

Хз, как по мне с учётом ограниченной информации о задаче я бы не вводил новых сущностей

Sergey P
Хз, как по мне с учётом ограниченной информации о ...

Согласен, то самый незначительный вопрос, на обсуждение которого тратится больше всего времени)

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Any electron dev here?
Sayanth Tezro
12
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Карта сайта