[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Опять про объекты)
Страницы: 1, 2, 3
twin
Цитата (Ron @ 16.12.2019 - 12:20)
Если еще проще: отсутствие правильного понимания делегирования и абстракции на самом простом уровне. Не думаю, что есть смысл обсуждать с тобой ООП, по одной только этой причине. =)
Ну да, куда уж мне до высших материй laugh.gif

И с чего ты взял, что у меня отсутствует правильное твое понимание? Я прекрасно понимаю, как бы сделал ты. И именно это и называю "махровым ООП". То есть ООП ради ООП.

Чтоб не быть голословным немного подробностей.

Мне с одного сервиса предоставляют некоторые данные. Предоставляют их в виде DTO'шки. Свойств много, больше 30. Ну и соответственно дали класс, который по большому счету состоит из овер 30 геттеров. Мне из них нужно только 8. Это раз.

В API (в моем апи) предусмотрено аварийное получение данных с резервного сервиса, если вдруг что-то случилось с основным. Резервный сервис мой, он предоставляет данные за последний актуальный период. Ну не суть, он тоже выплевывает DTO. В нем, естественно 8 основных полей. Ибо остальных данных тупо нет в системе.

В итоге имеем два разных объекта, сформированных разными классами.

И тут, как бы сделал ты: ты как минимум слепил бы адаптеры. Или приспособил бы какой-нибудь мост. Или еще чего-нибудь наворотил из паттернов. Это же так "правильно", наклепать кучу классов, чтоб все по учебнику. Главное не трогать ничего руками в исходниках, а вдруг что-нибудь!

В итоге имеем минимум 3 класса, в дном 37 методов, в другом 8, в третьем хз. А то и больше.

Я же просто выкинул все лишнее, оставил 8 геттеров и добавил одно поле, по которому определяю, откуда данные и их актуальность. В итоге имею всего один класс с 9 геттерами. Ну еще сделал там кое что по мелочи - не важно. Причем этот класс совсем не такой, с помощью которых формировались DTO'шки. Это к вопросу о работе объекта с "созвучными" классами.

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

Но я не вижу плюсов в твоем подходе, а вот минусов вижу кучу.

С другой стороны, моя схема работает больше 6 лет и пережила несколько "модификаций" DTO стороннего сервиса. Они что то там добавляют постоянно, то, что мне ну вообще не нужно. И какой смысл обновлять их версию, если это все в пустоту. И я не вижу недостатков, а плюсы очевидны.

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

Может я в чем то и не прав, но ты, кроме как "это так, потому что это так должно быть!" не приводишь никаких аргументов. И действительно, обсуждать с тобой это нет смысла, как нет смысла дискутировать с религиозными фанатиками:

Ад есть! Не смей усомниться, иначе будешь гореть в аду! biggrin.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Ron
Цитата (twin @ 16.12.2019 - 20:07)
Но я не вижу плюсов в твоем подходе, а вот минусов вижу кучу.

Очень лестно что называешь подход ООП моим. biggrin.gif Заметно, что не видишь, можно было не говорить. А гипотезу почему, я выдвинул в предыдущем посте.

Цитата (twin @ 16.12.2019 - 20:07)
Может я в чем то и не прав, но ты, кроме как "это так, потому что это так должно быть!" не приводишь никаких аргументов.

Не хочу снова вступать в борьбу с демагогией, не более. Другие, вероятно, руководствуются примерно теми же соображениями.

Да я так, собственно, ради смеха, началось ведь в треде "юмор". wink.gif



twin
Цитата (Ron @ 16.12.2019 - 18:36)
Заметно, что не видишь, можно было не говорить. А гипотезу почему, я выдвинул в предыдущем посте

Я их не вижу, потому что их нет. И ничего ты не выдвигал. Ты просто сказал, что веревка, это вервие простое (с). Я то это на практике испытал, а ты все в домыслах витаешь.
Цитата (Ron @ 16.12.2019 - 18:36)
Не хочу снова вступать в борьбу с демагогией, не более.
И правильно делаешь. Гораздо проще наморщить лоб и сказать - я то все знаю, а ты нуб. biggrin.gif Глядишь, кто и поверит.
Цитата (Ron @ 16.12.2019 - 18:36)
Да я так, собственно, ради смеха, началось ведь в треде "юмор".
Это не смешно на самом деле, безосновательно обвинять людей в демагогии. Вернее это из области "сам шучу и сам смеюсь". smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Vladchucha
Вопрос из зала.
Если я правильно помню,
то в Java принципиально нельзя ни
одной строчки программы написать,
кроме как в рамках класса
(ну, обьекты можно создавать еще biggrin.gif ).
Это как тогда расценивать ?
chee
Santehnick, я отвечу вместо него. DDD проектировщики почему-то делаю в коде реальным, то что в реальной жизни абстрактно. Группа это абстрактная вещь и в коде и в реальном мире. Ну посмотри ты как реализована группа в предметной области на которую ты пишешь DDD код, там же явно не бесконечное количество пользователей и там явно прослеживается как пользователи подвязываются к группе. Если мы например работаем с рабочими группами, то связями являются документа и рекгламенты и в рамках DDD это будут сущности. Если же мы работаем не с рабочими группами, а абстрактными, которые есть только в коде, то нужно же понимать, что мы всегда работаем с ограниченным контекстом, то есть ну не может в твоем контексте быть бесконечное количество пользователей в группе. Если тебе нужно оперировать всеми пользователями группы или очень большой ее частью, то это уже должны быть методы самой группы, которые инкапсулируют в себя логику управления этими группами.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
brevis
Цитата (Santehnick @ 22.12.2019 - 22:55)
brevis, ты используешь ооп для проектирования доменной модели?

Ух ты, оказывается я не заметил в свое время вопрос.

Нет, не использую. Вообще то, что я делаю и использую, я бы назвал "программирование с элементами ООП" smile.gif

_____________
Чатик в телеге
twin
Описывать объектами всю доменную модель глупо, если не сказать больше. Можно реально запутаться и запутать заказчика. Допустим есть такое понятие в статистике, как "средний чек". Этой штуки физически быть не может в силу специфики. Однако если следовать канонам, нужно обязательно представить его в виде объекта, хотя это просто вычисляемая величина. И таких примеров полно, вон chee описал похожее.

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

Другое дело в прокате. Там предмет, это индивидуальность. Можно отследить его движение, определить местонахождения (склад, на руках у арендатора, пункт выдачи, в доставке и пр), высчитать амортизационныую стоимость и так далее. Пока он не будет списан и выбракован. У каждого предмета есть собственный идентификатор, и это сущность.

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

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 20.02.2021 - 18:02)
Так что мультипарадигма рулит, как не крути

🤷‍♂️

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
S.Chushkin
Цитата (twin @ 20.02.2021 - 18:02)
Описывать объектам...{много текста}

Какая у тебя каша в голове... или это банальный троллинг. smile.gif


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
chee
Цитата (Santehnick @ 20.02.2021 - 21:31)
Я конечно с того времени нашел решение и сегодня бы делал примерно так:

Ты не поверишь, но я пришел примерно к тому же что и ты, вот смотри тут. Правда это еще прототип и я экспериментирую.

Сейчас вот думаю над проблемой, в сущностях я выпилил вообще весь код связанный с сеттерами и геттерами, они мне всегда не нравились. Но возникает проблема, сущности стали закрытые, то есть только внутрь принимать объекты и настраивать их своими данными. Твой пример будет выглядеть так

class Group {
constructor(int id, int age, User users) {
this.id = id;
this.age = age;
this.users = users;
}
addUser(User user) {
group = this;
gs = new GroupSubscription;

spec = new GroupAgeSpecification;

group.presetToSpec(spec);
user.presetToSpec(spec);

if (!spec.satisfy()) {
throw new DomainException('You are not old enough to subscribe to this group.');
}

group.addToGroupSubscription(gs);
user.addToGroupSubscription(gs);

return gs;
}

addToGroupSubscription(GroupSubscription gs) {
gs.group(this.is);
}

presetToSpec(Specification sp);
}

class User {
addToGroupSubscription(GroupSubscription gs) {
gs.group(this.is);
}
presetToSpec(Specification sp);
}

Помоему я упоролся :blink:

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.