Size: a a a

Software Design/Architecture/Zen

2021 July 29

AI

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

определение мартина сбивает с толку, т.к. может показаться, что сам устойчивый компонент должен быть абстрактным (аки помеченным abstract в каком-то языке)
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
типа отдать курьеру
источник

AI

Arthur Irgashev in Software Design/Architecture/Zen
это, кстати, дополняет мой ответ о тестировании и зачем делать моки
источник

k

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

ПГ

Павел Г. in Software Design/Architecture/Zen
Потому что приходит курьер. Ему менеджер отдает товар и тыкает - отдал товар
источник

AI

Arthur Irgashev in Software Design/Architecture/Zen
в клине рассказывается о SAP и SDP, которые вместе дают DIP
источник

k

knopkod4v in Software Design/Architecture/Zen
в какой момент во всём это происходит настоящая оплата? Ну то есть деньги покупатель когда отдаёт? В момент когда к нему курьер приходит с товаром?
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Когда захочет. Есть баланс, его пользователь пополняет. Как только его пополнят, с него перетекает на товар. Если баланса хватает товар считается оплаченным
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
в смысле зачем, а что вы тогда делаете когда создаете контроллер, потом юзкейс, потом бизнес сервис, вы повышаете уровень абстракции, контроллер решает самую конкретную задачу, он оперирует в терминах бд, хттп и юзкейсов, юзкейс в свою очередь такой "клал я на ваши хттп", а бизнес сервис уже только сущностями жанглирует - самый высокий уровень абстракции
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Что то пока мне этого не понять... бизнес сервис жонглирует конкретными сущностями, и поэтому он абстрактный максимально, в моем понимании как раз конкретика полная... видимо я не так понимаю :(
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
от сюда и вот эти все правила мол не нарушай слои, не играй с сущностями в контроллере на прямую и т.д. это просто применение базового правила из чистого кода
источник

k

knopkod4v in Software Design/Architecture/Zen
а "отдал товар" менеджер тыкает для чего?
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Чтобы потом у курьера заказ на доставку появился в его части приложения
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
чистый код (с)
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
я думаю листинг приводить не надо)
источник

AI

Arthur Irgashev in Software Design/Architecture/Zen
я бы предложил тебе скинуть код, потому что тут люди тебя вряд ли поймут.

проще всего сделать валидейшн-леер какой-то, к-ый проверит, что чекаут оплачен. с другой стороны, если у тебя баундед контексты, в контекст курьера можно положить ордер с минимальным набором полей, где будет
Order {id, isPaymentCompleted }
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Вот это кстати предложение интересное в качестве варианта, только получается надо это поле дублировать (я выше писал про флаги), и это немного усложняет вещи в особенности конченой согласованности. Когда товар может перейти в другое состояние а курьеру уже отдали.
источник

k

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

AI

Arthur Irgashev in Software Design/Architecture/Zen
нет, я не говорю о дублировании таблиц в базе, я говорю об ограничении маппингов на уровне орм в твоём приложении. таблица всё ещё будет одна, поэтому всё будет косистентно
источник