Size: a a a

Software Design/Architecture/Zen

2020 September 25

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
тогда непонятно что такое инкапсуляция, "соединение кода и данных" - так себе определение
смотри. инкапсуляция сама по себе не имеет особо значения. Это инструмент для достижения более великой цели - information hiding
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
knopkod4v
почему?
потому что нормальные люди не делают конструкторы которые валятся
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Apache DOG™
потому что нормальные люди не делают конструкторы которые валятся
потому don't create your aggregate roots
источник

k

knopkod4v in Software Design/Architecture/Zen
Apache DOG™
потому что нормальные люди не делают конструкторы которые валятся
но как тогда нормальные люди проверяют, чтобы бабло не было отрицательным?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
но как тогда нормальные люди проверяют, чтобы бабло не было отрицательным?
об этом и есть статья Уди на тему того что другие агрегаты выступают фабриками для твоих агрегатов
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
об этом и есть статья Уди на тему того что другие агрегаты выступают фабриками для твоих агрегатов
как вариант. Правда это не так удобно может быть, т.к. ограничения на создание приходится держать отдельно от данных
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
как вариант. Правда это не так удобно может быть, т.к. ограничения на создание приходится держать отдельно от данных
ну пока оно не создано оно не отдельно)
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
ну пока оно не создано оно не отдельно)
ну это ты про рантайм. А если код смотреть  - оно не так очевидно получается
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
ну это ты про рантайм. А если код смотреть  - оно не так очевидно получается
нужны конкретные примеры. могу сказать что универсального ответа нет.
источник

k

knopkod4v in Software Design/Architecture/Zen
хде ж я вам реальные примеры возьму, у меня формочки стынут)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
ну это ты про рантайм. А если код смотреть  - оно не так очевидно получается
если у тебя фабричный метод связан типами и есть какие-то правила кому можно new дергать - то в целом все довольно очевидно и в коде
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
knopkod4v
но как тогда нормальные люди проверяют, чтобы бабло не было отрицательным?
Int => Error \/ Bablo
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
если у тебя фабричный метод связан типами и есть какие-то правила кому можно new дергать - то в целом все довольно очевидно и в коде
ну вот правила эти в коде кому можно дёргать new, а кому нет - было бы неплохо выразить как-то
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
ну вот правила эти в коде кому можно дёргать new, а кому нет - было бы неплохо выразить как-то
ну в реальности причин делать new не так много, и обычно это как-то связано логически бизнес логикой... мол... ты ж не будешь просто так создавать что-то...

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

В этом случае мы можем создать некий агрегат который будет хранить в себе неподтвержденный email  (UnconfirmedEmail какой, я так себе в нэйминг) и после подтверждения ты можешь использовать этот агрегат что бы сделать какого-нибудь Customer.

В этом случае вся валидация прекондишенов для создания Customer будет происходить в рамках UnconfirmedEmail и причин кастомеру ругаться на email не будет. Так же как и причин по которым ты где-то еще захочешь сделать какого-то другого кастомера с таким же набором ограничений на входящие данные.

Пример может так себе конечно, но смысл в этом. Скрыть информацию о отдельном этапе жизни данных от всей остальной системы. Кастомеру теперь об этом знать не надо. И всем кто работает с кастомером тоже...
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
ну в реальности причин делать new не так много, и обычно это как-то связано логически бизнес логикой... мол... ты ж не будешь просто так создавать что-то...

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

В этом случае мы можем создать некий агрегат который будет хранить в себе неподтвержденный email  (UnconfirmedEmail какой, я так себе в нэйминг) и после подтверждения ты можешь использовать этот агрегат что бы сделать какого-нибудь Customer.

В этом случае вся валидация прекондишенов для создания Customer будет происходить в рамках UnconfirmedEmail и причин кастомеру ругаться на email не будет. Так же как и причин по которым ты где-то еще захочешь сделать какого-то другого кастомера с таким же набором ограничений на входящие данные.

Пример может так себе конечно, но смысл в этом. Скрыть информацию о отдельном этапе жизни данных от всей остальной системы. Кастомеру теперь об этом знать не надо. И всем кто работает с кастомером тоже...
для думающих людей это вполне катит, я согласен. Точнее даже для людей, которые пытаются разобраться в процессе
Ну и надо понмать, что new - опасная штука и что её надо встраивать в этот процесс весь
Хороший пример на самом деле
источник

АЯ

Андрей Ява in Software Design/Architecture/Zen
Vlad Sobenko
А у тебя что? Если не секрет)
Говномешанина из ооп, функций и  процедур. Но стремительно форматирую мышление и рефачу в сторону ООП.
Понятно что идеального результата  не будет.
источник

A

Adel in Software Design/Architecture/Zen
Андрей Ява
Говномешанина из ооп, функций и  процедур. Но стремительно форматирую мышление и рефачу в сторону ООП.
Понятно что идеального результата  не будет.
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
ну в реальности причин делать new не так много, и обычно это как-то связано логически бизнес логикой... мол... ты ж не будешь просто так создавать что-то...

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

В этом случае мы можем создать некий агрегат который будет хранить в себе неподтвержденный email  (UnconfirmedEmail какой, я так себе в нэйминг) и после подтверждения ты можешь использовать этот агрегат что бы сделать какого-нибудь Customer.

В этом случае вся валидация прекондишенов для создания Customer будет происходить в рамках UnconfirmedEmail и причин кастомеру ругаться на email не будет. Так же как и причин по которым ты где-то еще захочешь сделать какого-то другого кастомера с таким же набором ограничений на входящие данные.

Пример может так себе конечно, но смысл в этом. Скрыть информацию о отдельном этапе жизни данных от всей остальной системы. Кастомеру теперь об этом знать не надо. И всем кто работает с кастомером тоже...
а ещё тут может быть проблема, что при создании объекта нам нужен другой объект. Между ними появляется жёсткая связь, идентификатором уже не обойдёшься
источник

SP

Sergey Protko in Software Design/Architecture/Zen
knopkod4v
а ещё тут может быть проблема, что при создании объекта нам нужен другой объект. Между ними появляется жёсткая связь, идентификатором уже не обойдёшься
ну тут опять же нужны конкретные примеры. во всяком случае я не готов какие-то общие правила формулировать
источник

АЯ

Андрей Ява in Software Design/Architecture/Zen
Понатыкают анемиков по всему проекту и считают что они пошли в ФП
источник