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

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

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

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

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

11 ответов

17 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта