Size: a a a

Software Design/Architecture/Zen

2020 December 22

SP

Sergey Protko in Software Design/Architecture/Zen
Сергей З.
на самом деле начинал я без grid. В моем понимании все-таки все полигоны образовывали сетку и решил, что правлиьней так сделать. Твой посыл в том, что сетка мне нужна, правильно? Тогда в том месте где полигон создается я могу деать batch processing?
смотри. Есть цикл жизни сущности. Возможно тот грид который нужен для создания поля и тот грид который будет следить за инвариантами это разные вещи. Возможно ты можешь сделать просто фабрику которая выплевывает коллекцию/итератор полигонов и на этом этапе уже применять batch processing
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну то есть "агрегаты" != "сущности". Сущности обычно больше. Агрегаты же нужны что бы гарантировать соблюдение инвариантов и обычно стараются делать их как можно меньше. То есть агрегат "Игра" которая хранит в себе всех игроков, поле и предметы - плохой агрегат потому что взаимодействие с оными происходит синхронно и нет возможности паралелить операции
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Эрик Эванс не раз говорил что "зря я про сущности втирал в начале книги, не надо было"
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
Sergey Protko
ну то есть "агрегаты" != "сущности". Сущности обычно больше. Агрегаты же нужны что бы гарантировать соблюдение инвариантов и обычно стараются делать их как можно меньше. То есть агрегат "Игра" которая хранит в себе всех игроков, поле и предметы - плохой агрегат потому что взаимодействие с оными происходит синхронно и нет возможности паралелить операции
Агрегат "Игра" может быть реализован как угодно, в том числе с многопоточностью, асинхронностью, блекджеком и рулеткой
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Serguei Tarassov
Агрегат "Игра" может быть реализован как угодно, в том числе с многопоточностью, асинхронностью, блекджеком и рулеткой
Если игра однопользовательская то да :)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Агрегат = партиция данных гарантирующая консистегтность этих данных. Гарантии эти достигаются за счёт того что агрегат работает со стэйтом в памяти (тоесть возможны атомарные операции) и не предоставляет доступа к своему стэйту (никак)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Опять же нет конкурентых операций то можно и "агрегат игра"
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Sergey Protko
Агрегат = партиция данных гарантирующая консистегтность этих данных. Гарантии эти достигаются за счёт того что агрегат работает со стэйтом в памяти (тоесть возможны атомарные операции) и не предоставляет доступа к своему стэйту (никак)
Ну вот опять то из агрегата можно читать, если только не для условий, то доступа к стейту никак не предоставляет. Тяжко)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Константин Грачев
Ну вот опять то из агрегата можно читать, если только не для условий, то доступа к стейту никак не предоставляет. Тяжко)
если нигде не будет записи, последущей после чтения внутреннего стейта агрегата, то почему и нет?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Проблема не в самом чтении стейта, а в том, чтобы не принимать решений, основываясь на знания стейта агрегата, вне этого агрегата
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
никто не обладает наиболее актуальными данными кроме самого агрегата
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Константин Грачев
Ну вот опять то из агрегата можно читать, если только не для условий, то доступа к стейту никак не предоставляет. Тяжко)
Да, стоило уточнить что речь про запись, но вообще лучше не юзать агрегаты на чтение
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Dmitriy Tkachenko
никто не обладает наиболее актуальными данными кроме самого агрегата
Более того они внутри не могут устареть
источник

SP

Sergey Protko in Software Design/Architecture/Zen
По определению
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Sergey Protko
Более того они внутри не могут устареть
А это как?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Ну втупую это решается версиями
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Аля оптимистичная блокировка
источник
2020 December 23

КГ

Константин Грачев... in Software Design/Architecture/Zen
Есть апи и 2 личных кабинета. Для админа и для клиента.
На сколько нормальная идея делать 2 разных апи эндпоинта?
Столкнулся с тем, что 80% методов по сути разные. Где то просто ответы разные в силу ограничения доступа к полям. Где то функционал относится только к одному из кабинетов.

Ну то есть я всегда считал, что апи вроде как должна быть client agnostic и бекенду должно быть фиолетово пришел к нему запрос от SPA или запрос по крону от партнёра
источник

k

knopkod4v in Software Design/Architecture/Zen
Константин Грачев
Есть апи и 2 личных кабинета. Для админа и для клиента.
На сколько нормальная идея делать 2 разных апи эндпоинта?
Столкнулся с тем, что 80% методов по сути разные. Где то просто ответы разные в силу ограничения доступа к полям. Где то функционал относится только к одному из кабинетов.

Ну то есть я всегда считал, что апи вроде как должна быть client agnostic и бекенду должно быть фиолетово пришел к нему запрос от SPA или запрос по крону от партнёра
с тем же вопросом сталкивался - мне кажется отдельно надо делать

Может можно попытаться задаваться вопросом - "Что будет, если изменится 1 эндпоинт - должен ли поменяться другой?"
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
На json-rpc одну апи лепить совсем больно. На GraphQL вроде должно быть проще, но тоже нюансы. Например если разнести на разные разные эндпоинты, то можно отдать вопрос авторизации фреймворку. Если же один, нужно будет при резолве полей проверять есть ли доступ. И если нет, кидать ошибку? В документации как это отразить, что один метод для разных пользователей даёт разные результаты
источник