
Ilia
17.12.2017
04:34:06
Пациент и врач капец разные класс
Тут хуже все, пациент и врач -это роли людей. Пациент может стать врачём в любой момент и наоборот. Врач даже может лечить самого себя (привет парадоксу брадобрея)

Sergey
17.12.2017
08:24:09

Roman
17.12.2017
09:19:50
Я могу просто вписать каждому классу эти общие поля
Сделай сначала просто, ничего не объединяя. Если через какое-то время дублирование ФИО будет причинять боль, тогда и будешь с ним разбираться. Дублирование в двух местах ни капли не страшнее преждевременного обобщения кода

Google

Sergey
17.12.2017
09:42:22
но тут цель уже не в DRY


Roman
17.12.2017
10:13:13
с другой стороны сущность в 20 полей уже может быть поводом выделять VO
Может быть, а может и нет.
Возвращаясь к ФИО, вряд ли придется переиспользовать одно и тоже ФИО в нескольких местах.
Если преждевременно выделять ФИО в Value-Object получиться еще больше дублирования.
Вместо простого
doctor = Doctor('Telichkin', 'Roman', 'Konstantinovich')
Мы получим
my_name = FullName('Telichkin', 'Roman', 'Konstantinovich')
doctor = Doctor(my_name)
my_name больше нигде не переиспользуется, но для создания экземпляров класса нам нужно каждый раз создавать объект FullName
patient_name = FullName('Protko', 'Sergey', 'Fesorovich')
patient = Patient(patient_name)
Естественно, такое дублирование нас не устраивает, и мы вводим фабрику
doctor = DoctorFactory.create('Telichkin', 'Roman', 'Konstantinovich')
patient = PatientFactory.create('Protko', 'Sergey', 'Fesorovich')
Но, как видно, фабрика здесь имеет такой же интерфейс, как конструктор класса в самом первом примере. Так зачем нам нужно усложнять код сначала Value-Object'om, а потом накручивать из-за этого усложнения сверху фабрику?


Aleh
17.12.2017
10:19:44
Может быть, а может и нет.
Возвращаясь к ФИО, вряд ли придется переиспользовать одно и тоже ФИО в нескольких местах.
Если преждевременно выделять ФИО в Value-Object получиться еще больше дублирования.
Вместо простого
doctor = Doctor('Telichkin', 'Roman', 'Konstantinovich')
Мы получим
my_name = FullName('Telichkin', 'Roman', 'Konstantinovich')
doctor = Doctor(my_name)
my_name больше нигде не переиспользуется, но для создания экземпляров класса нам нужно каждый раз создавать объект FullName
patient_name = FullName('Protko', 'Sergey', 'Fesorovich')
patient = Patient(patient_name)
Естественно, такое дублирование нас не устраивает, и мы вводим фабрику
doctor = DoctorFactory.create('Telichkin', 'Roman', 'Konstantinovich')
patient = PatientFactory.create('Protko', 'Sergey', 'Fesorovich')
Но, как видно, фабрика здесь имеет такой же интерфейс, как конструктор класса в самом первом примере. Так зачем нам нужно усложнять код сначала Value-Object'om, а потом накручивать из-за этого усложнения сверху фабрику?
Зачем вводить фабрику, если можно создавать Name в конструкторе
И да, зачем фабрика?


Roman
17.12.2017
10:35:27
И да, зачем фабрика?
Чтобы создавать объект не двумя строчками: создание FullName, а потом создание объекта, а одной.
Можно создавать Name в конструкторе, но это такое же дублирование, просто вынесенное в совершенно ненужную абстракцию

Aleh
17.12.2017
10:35:56

Adel
17.12.2017
10:37:03
изначально изза этогоФИО человек хотел общего предка делать. это уже говорит о том,что неплохо бы выделить VO. да и с ФИО постоянно надо чтото делать. краткое Фамилия И.О. и т.д.
выделение этого VO окупится

Aleh
17.12.2017
10:40:12
Ну и вот
http://wiki.c2.com/?PrimitiveObsession

Sergey
17.12.2017
10:52:30
все бизнес ограничения привязанные к полному имени будут в одном месте. А если ты под дублирование подразумеваешь факт того что нам надо объект где-то инициализировать и придется делать это в разных местах (например конструкторы разных сущностей)... наверное тогда тяжко какой-нибудь string buidler юзать будет... там же тоже везде и всюду дублирование. или объекты дат

Google

Sergey
17.12.2017
10:54:14
но дублирования как бы... нет)
это как вызов метода, если ты вызываешь его в нескольких местах, но вся логика всеравно внутри, где тут дублирование?

Roman
17.12.2017
10:58:01

Adel
17.12.2017
10:58:23
тебе уже столько аргументов привели

Sergey
17.12.2017
11:01:13
это не требует никаких усилий - завернуть ФИО в класс
зато мы более явно в коде выразим термин "полное имя"
а может быть нам не полное имя вообще нужно, и т.д. это уже из требований.

Roman
17.12.2017
11:04:41
Я раньше тоже много работал с примитивами, но в последнее время работа с VO очень нравится, аж удовольствие получаешь плюс не дублирую валидацию если есть такая

Roman
17.12.2017
11:13:09
тебе уже столько аргументов привели
А я такой негодяй все равно про KISS рассказываю.
Я не против VO, и не против обобщения. Вообще, хороший код в пределе не содержит повторений.
Но человек спрашивал варианты решения задачи без контекста. Без контекста эта задача выглядит простой и усложнять ее новыми сущностями без необходимости не стоит.
Kent Beck
"Simplicity is the most intensely intellectual of the XP values. To make a system simple enough to gracefully solve only today's problem is hard work."


Sergey
17.12.2017
11:16:10
А я такой негодяй все равно про KISS рассказываю.
Я не против VO, и не против обобщения. Вообще, хороший код в пределе не содержит повторений.
Но человек спрашивал варианты решения задачи без контекста. Без контекста эта задача выглядит простой и усложнять ее новыми сущностями без необходимости не стоит.
Kent Beck
"Simplicity is the most intensely intellectual of the XP values. To make a system simple enough to gracefully solve only today's problem is hard work."
> про KISS рассказываю
кисс не про то что бы "сделать тупо", а про то что бы "тупо пользоваться"
> и не против обобщения
тут по сути нет обобщения... хотя как, есть наверное немного... но это не такое жесткое обобщение как скажем наследование. А так - преждевременное обобщение это очень нехорошо, тут я с тобой согласен
> Вообще, хороший код в пределе не содержит повторений.
большая часть принципов конфликтуют между собой не спроста, а что бы ты добился баланса.
> Без контекста эта задача выглядит простой
контекст он минимально задал, есть 2 сущности, у них есть общие поля, и что бы эти общие поля убрать он захотел наследоваться. VO в этом ключе позволяет решить ему ту же задачу но намного более адекватно и "обобщения" тут на самом деле меньше, как и вариантов дальнейшего развития событий.
> Simplicity is the most intensely intellectual of the XP values
и что может быть проще чем VO?)


Roman
17.12.2017
11:18:18


Roman
17.12.2017
11:20:00
Вопрошающий не знает, что такое VO, поэтому в данном случае лучше его отсутствие.
У нас немного различаются взгляды на простоту, поэтому предлагаю на этом закончить.

Sergey
17.12.2017
11:23:39
я к тому что не надо путать "просто" и "легко"

Roman
17.12.2017
11:24:55
Можешь не скидывать этот видос, я его тоже смотрел

Sergey
17.12.2017
11:25:06
хз о каком ты видосе
просто меня удивляет позиция "если он не знает - ну и ладненько". Это какой-то очень странный подход к разработке...

Roman
17.12.2017
11:26:19
https://www.infoq.com/presentations/Simple-Made-Easy

Google

Sergey
17.12.2017
11:26:57
а, этот... у Алана Кея есть похожее, и много у кого еще
но смысл в икажении таких вещей как KISS и подмена понятий (та же приведенная тобой цитата Кента она как бы несколько к другим вещам относится)

Roman
17.12.2017
11:28:54

Sergey
17.12.2017
11:30:59

Roman
17.12.2017
11:39:12

Kirill
17.12.2017
15:39:55
Помню, скидывали тут видео про мужика, который на джаве без switch уже 8 лет пишет.
Там у него в докладе много формальной логики и понять без подготовки сложно.
Кто ещё пишет на ООП языках без switch 5+ лет скиньте более доступные примеры.

Bohdan
17.12.2017
15:44:47
без switch/case? или я сильно мелко беру?

Kirill
17.12.2017
15:47:18

Bohdan
17.12.2017
15:48:05
а в чем проблема без них?)
это ведь просто сахар
в том же питоне их нет - пиши себе через if/else и не парься
ведь свитч это просто частный случай серии if'ов с оператором == и фиксированным левым операндом
там, конечно, ещё break есть, но его можно заменить флагом и if без else, если нужны "провалы" или использовать if/else if, если считать, что break есть везде

Sergey
17.12.2017
15:56:12

Kirill
17.12.2017
15:56:17
Наверное я некорректно выразился. Под switch подразумевается и if/else
Кто смотрел видео может подсказать там имелись ввиду только switch в фабриках или вообще везде?

Sergey
17.12.2017
15:57:28
честно - хз что именно читать... про полиморфизм в целом?
на википедии в целоп неплохо вопрос покрыт
или ты про того чувака который SOLID через логику Хоара раскрывал?

Google

Sergey
17.12.2017
15:58:56
у него там были такие фразочки как "пишу без свитчей"

Kirill
17.12.2017
15:59:00

Sergey
17.12.2017
16:00:00
https://www.youtube.com/watch?v=CmCEdVrZQAE
вот этот чел короч

Maksim
17.12.2017
16:00:47
название стрёмное какое-то..вангую прям чушь внутри.
Сергей, стоит смотреть?)

Aleh
17.12.2017
16:01:16
Да не, нормальное
Можно смотреть

Kirill
17.12.2017
16:01:28
Да, просто сложно было понимать без подготовки.
Что в итоге он предлагает или просто вывел принципы?

Maksim
17.12.2017
16:01:38
tnx

Bohdan
17.12.2017
16:03:26
гляну, спасибо

Sergey
17.12.2017
16:13:32
ну мол, я чет не уловил что бы они от этого стали более формальными, он по сути больше open/close как по мне доказать пытался

Maksim
17.12.2017
16:14:27
ну название желтезной попахивает) но гляну, раз такое дело

Kirill
17.12.2017
16:37:16
Вопрос практический.
Так размер JS(TS) приложений постоянно растёт, то там тоже возникают проблемы написания легко поддерживаемых приложений за счёт использования хороших подходов к написанию кода.
Так вот, есть ли смысл тянуть правильные ООП-плюшки в JS(TS), учитывая особенности реализации ООП в JS?

Sergey
17.12.2017
16:42:34
никаких особенностей
другое - возможно. Но принципам на это плевать

Kirill
17.12.2017
16:43:11
Ну, this "не такой как все."

Sergey
17.12.2017
16:43:24

Google

Sergey
17.12.2017
16:43:32
можешь на python посмотреть
как по мне там намного более "не такой"
но это субъективно
и не мешает студентам в MIT на примере python изучать ООП
> возникают проблемы написания легко поддерживаемых приложений за счёт использования хороших подходов к написанию кода.
то есть проблемы возникают из-за хороших практик?

Kirill
17.12.2017
16:47:48

Sergey
17.12.2017
16:49:54
смотря что и на чем ты пишешь

Kirill
17.12.2017
16:49:55

Sergey
17.12.2017
16:50:08
возможно стоит смотреть в сторону ФП?
там то как раз без свитчей)

Kirill
17.12.2017
16:50:24

Sergey
17.12.2017
16:51:10