Size: a a a

Software Design/Architecture/Zen

2020 December 15

VG

Valentin Gerbey in Software Design/Architecture/Zen
Sergey Protko
третий тоже самое что и первый с точки зрения контроля за состоянием, хотя он все же лучше первого
третий вариант в предложенной реализации выглядит вообще ужасно(
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Max Grom
Как по мне, то паттерн Состояние для описания сущности Tournament не подходит. Во-первых, сущность большая, а состояние - лишь малая чсть логики этого большого куска. Во-вторых, непрозрачная обязанность. Tournament может всё - добавлять команды, начинаться, заканчиваться, восстанавливаться, менять количество команд. Даже резделив эту гору обязанностей по разным Tournament-ам в разных стостояних - эта проблема не решается. Предложил бы посмотреть в сторону Mediator или хотя бы разобрать логику на более мелкие части
как ты видишь использование медиатора в рамках этой проблемы? и как бы разбил логику, вот на текущем примере даже?
источник

MG

Max Grom in Software Design/Architecture/Zen
Мне сложно сказать не понимая основной задачи. Пока что в предложенном драфте лишь описание структуры. Как она должна работать - совершенно другой вопрос который как раз неясен. Для меня очевидно, что Tournament просто объеденяющее звено. Как миниму нужно разбить всё на Team, Game и Tournament. Судя по названию методов разные состояния должны быть в том числе для Game. Наверное делая finishGame() нужно делать и startGame(). Метод registerTeam() наверное вообще нужно вынести и не позволять создавать Tournament без набора команд. Если их количество и правда меняться в процессе - нуу, надеюсь это не так иначе это странный турнир. Можно не делать состояния а представить всё в виде отдельных этапов объядиняющихся в один турнир. У каждого этапа свой набор входящих сущностей для функционирования и манипулирования. Подсчёт очков - тоже в отдельную сущность - будет принимать на вход команды, их результаты, тип турнире (если будет нужен) и определять итог
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Max Grom
Как по мне, то паттерн Состояние для описания сущности Tournament не подходит. Во-первых, сущность большая, а состояние - лишь малая чсть логики этого большого куска. Во-вторых, непрозрачная обязанность. Tournament может всё - добавлять команды, начинаться, заканчиваться, восстанавливаться, менять количество команд. Даже резделив эту гору обязанностей по разным Tournament-ам в разных стостояних - эта проблема не решается. Предложил бы посмотреть в сторону Mediator или хотя бы разобрать логику на более мелкие части
сущности это плохо, агрегаты это хорошо. "большие сущности" это "очень плохо". Чаще всего большую сущность можо заменить айдишником на которые ссылается куча маленьких агрегатов ибо разным агрегатам не нужны все куски стэйта

Эрик Эванс голову не раз пеплом посыпал что в своей синей книги про сущности ажно в первой половине книги втирал - мол теперь хрен переучишь
источник

SP

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

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

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Sergey Protko
мое мнение - штуки типа state или status отлично подходят для каких рид моделек но если они появляются внутри агрегата и явно регламентируют жизенный цикл стэйта - это сигнальчик что бы пересмотреть подход к моделированию.

Исключение может быть только для штук типа "был драф - опубликовали - теперь пометили что это неактивный драфт" или еще чего. Аля софт делит если удалять агрегаты боязно (хотя я бы удалял)
Для разных сущностей на статус надо инфраструктуру которая будет понимать что создание новой сущности сводится в таких местах к смене айдишки в бд
источник

D

Danil in Software Design/Architecture/Zen
Евгений Ромашкан
Для разных сущностей на статус надо инфраструктуру которая будет понимать что создание новой сущности сводится в таких местах к смене айдишки в бд
🐒 Не понял связи между созданием сущности и сменой id. Типа разные состояния хранятся отдельно? Можно подробнее ...? Спасибо =)
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Danil
🐒 Не понял связи между созданием сущности и сменой id. Типа разные состояния хранятся отдельно? Можно подробнее ...? Спасибо =)
Ну тип неудобно на разные статусы заказа разные таблицы в бд делать
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
В коде я делаю типа $createdOrder = $draftOrder->publish();, а в бд хочу чтоб статус в таблице сменился
источник

D

Danil in Software Design/Architecture/Zen
А, это ясно=)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Евгений Ромашкан
Для разных сущностей на статус надо инфраструктуру которая будет понимать что создание новой сущности сводится в таких местах к смене айдишки в бд
мммм не оч понимаю зачем айдишки менять...
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Евгений Ромашкан
Ну тип неудобно на разные статусы заказа разные таблицы в бд делать
удобно)
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Sergey Protko
мммм не оч понимаю зачем айдишки менять...
Ой, статус я имел ввиду
источник

SP

Sergey Protko in Software Design/Architecture/Zen
можно просто key-value для агрегатов)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
тебе всеравно на запись больше ничего не надо обычно
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Sergey Protko
можно просто key-value для агрегатов)
Искать как?
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Sergey Protko
тебе всеравно на запись больше ничего не надо обычно
Не у всех есть рид модели отдельные)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а ты ищешь на запись? На чтение можно вьюшки в базе делать)
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Sergey Protko
а ты ищешь на запись? На чтение можно вьюшки в базе делать)
Оно ж медленно будет искать?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Евгений Ромашкан
Оно ж медленно будет искать?
как сделаешь так и будет. Есть материализованные вьюшки с индексами и всеми делами)
источник