все которые изменили его состояние или я чтото не понимаю?какие события
А, да, вот еще в php не хватает конструкции "public readonly". В typescript очень удобно.@WMix, состояние read модели не меняется. оно вообще immutable.
Это даВообще CQRS и всякие flux-redux это практически одно и то же.
решается с помощью annotate based development и трейтикаint Id{public get; private set;}
В тайпскрипте так (ну, почти так) тоже можно. Да и в обычном JS можно, только много букв писать.В typescript оно перекочевало из C#
А там много вкусного еще.
int Id{public get; private set;}
мне показалось, что ты собирался строить состояние модели по событиям@WMix, состояние read модели не меняется. оно вообще immutable.
Ну я думал генерить эвенты передавая туда read модель. Таким образом, она будет создаваться и внутри сущности и из базы.
Думаю, именование, как одна из трех сложных проблем в программировании, заслуживает отдельной темы.А я не про BC.
Они в разных слоях, обе модели друг про друга ничего не знают, и семантически и технически у них разные задачи. Даже слово «модель» к ним применима в разных смыслах.
В противном случае в API ты отдаёшь не «продукт», а «карточку продукта».
Когда удивлённый пользователь API спросит почему именно «карточка», то ты ему расскажешь, что это конфликтует с именем domain model.
Да и domain model со временем переименуешь, ведь на самом деле продукт на полках, а это — «КомпьютернаяМодельПродукта».
Пытаюсь понять вас. Иногда выходит, что разницы нет. У тебя в понятие "read model" - входит класс модели, который выполняет запрос, или это только сам класс с данными на выходе из модели?Да, можно сказать, что Read Model - это частный случай DTO. А в чем проблема с этим?
в TypeScript, как и в golang, задача соответствия отфонарных данных интерфейсу решается через duck typing,Если бы в PHP можно было описать интерфейс ассоциативного массива, как это делается в Typescript для plain JS objects - можно было бы и так, в Typescript я именно так и делаю.
Ну так read model — это и есть API, только внутренний.Отдавать в API "продукт" или "карточку продукта" не должно быть связано с классами программы.
Грубо говоря, DTO — это commands, queries и read models (ответ на query). Наверное, сюда в каком-то смысле можно отнести и events, т.к. эти сообщения — тоже часть внутренного API приложения. Просто классы с данными к/от service layer.Пытаюсь понять вас. Иногда выходит, что разницы нет.
Это просто класс с данными. Сервис, выполняющий запрос — это query service, он принимает на вход query, а на выходе — read model.У тебя в понятие "read model" - входит класс модели, который выполняет запрос, или это только сам класс с данными на выходе из модели?
В typescript совсем не так же, как в golang, и оба варианта не совсем duck typing, но это уже совсем оффтопик.в TypeScript, как и в golang, задача соответствия отфонарных данных интерфейсу решается через duck typing,
Happy refactoring, bitches.__get
Постоянно надо, когда работаешь с коллекциями в том или ином виде. PhpStorm-овская поддержка PhpDoc вида @return Foo[]|Collection, конечно, выручает, но все же это не на том уровне.Дженерики помогают не потерять типизацию, когда коллекция передается в общую функцию с универсальной обработкой данных разных пользовательских типов - а часто ли это надо в userland?