powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Маркерный интерфейс
56 сообщений из 56, показаны все 3 страниц
Маркерный интерфейс
    #39877905
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для регистрации в IoC - норм?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39877913
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маркерный интерфейс - антипаттерн. Если хочешь как-то пометить особым образом класс, то используй кастомные аттрибуты - они, в т.ч. для этого и придуманы. Приведи пример - как ты собираешься его использовать для IoC, я как-то не очень могу понять.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39877917
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
public interface ICommandHandler
{

}


public interface ICommandHandler<TCommand, TResult> : ICommandHandler
where TCommand : Command
{

}
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39877919
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public interface ICommandHandler
{

}


public interface ICommandHandler<TCommand, TResult> : ICommandHandler
where TCommand : Command
{

}
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39877940
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach,

И как это с IoC связано?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878202
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
public interface ICommandHandler<TCommand>
    where TCommand: CommandBase
{
   Task HandleAsync<TCommand>(TCommand command, CancellationToken ct);
}




Вот такого интерфейса достаточно, не нужно городить TResult, команда не должна ничего возвращать. Если нужно получать данные (например, идентификатор созданной сущности), то это делается двумя путями:

1. хороший: через отдельное событие, на которое клиент подписывается, так как команда может выполнится асинхронно
2. средненькой паршивости: записывать данные прям в объект переданной команды.

но что-то там возвращать -- совсем плохо.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878203
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bach,

И как это с IoC связано?

Напрямую.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878204
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachдля регистрации в IoC - норм?

здесь нет никакого маркерного интерфейса, не нужен он.
рефлексия позволяет найти все реализации по дженерик-интерфейсу.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878223
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНапрямую.

hVosttрефлексия позволяет найти все реализации по дженерик-интерфейсу.
Сам сказал, сам опроверг.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878224
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttкоманда не должна ничего возвращать.
Что за горячечный бред? Метод тоже никогда не должен ничего возвращать? Откуда тут знать, что ТС подразумевает в данном случае под "командой".
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878239
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttНапрямую.

hVosttрефлексия позволяет найти все реализации по дженерик-интерфейсу.
Сам сказал, сам опроверг.

тут нет маркерного интерфейса, который используется только для регистрации зависимостей.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878241
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttкоманда не должна ничего возвращать.
Что за горячечный бред? Метод тоже никогда не должен ничего возвращать? Откуда тут знать, что ТС подразумевает в данном случае под "командой".

почитай про ДДД. возврат значения из команды -- антипаттерн.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878242
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CQRS точнее
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878272
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCQRS точнее
В исходной теме где-то было про CQRS?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878283
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttCQRS точнее
В исходной теме где-то было про CQRS?

я так понял, что речь идёт про реализацию команд хендлера из паттерна CQRS

ничего другого не было сказано, так что я не понимаю с чем ты тогда споришь, да её со слюнями про "горячечный бред" :)
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878408
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Код: c#
1.
2.
3.
4.
5.
public interface ICommandHandler<TCommand>
    where TCommand: CommandBase
{
   Task HandleAsync<TCommand>(TCommand command, CancellationToken ct);
}




Вот такого интерфейса достаточно, не нужно городить TResult, команда не должна ничего возвращать. Если нужно получать данные (например, идентификатор созданной сущности), то это делается двумя путями:

1. хороший: через отдельное событие, на которое клиент подписывается, так как команда может выполнится асинхронно
2. средненькой паршивости: записывать данные прям в объект переданной команды.

но что-то там возвращать -- совсем плохо.

не по теме сабжа вопрос:
1. а почему плохо? можешь пример привести?
2. "так как команда может выполнится асинхронно" - await?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878412
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach2. "так как команда может выполнится асинхронно" - await?
Нет, как раз тут имеется в виду вовсе не await, а вызов по принципу - "отправил и забыл". И тут даже уже не то, что плохо что-то возвращать, а возвращать что-то просто не получится.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878414
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach"так как команда может выполнится асинхронно" - await?глобально асинхронно. То есть ты не ожидаешь ответа вообще, а просто периодически проверяешь статус выполнения.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878415
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТо есть ты не ожидаешь ответа вообще, а просто периодически проверяешь статус выполнения.
Либо событие ловишь.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878424
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bach2. "так как команда может выполнится асинхронно" - await?
Нет, как раз тут имеется в виду вовсе не await, а вызов по принципу - "отправил и забыл". И тут даже уже не то, что плохо что-то возвращать, а возвращать что-то просто не получится.

если я правильно понял, тут про какой-то фоновый сервис хвост имел в виду. у меня такого нет
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878428
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachесли я правильно понял, тут про какой-то фоновый сервис хвост имел в виду. у меня такого нетон имел ввиду CQRS
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878429
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже читал про то, что хвост говорит про "возвращение из команды плохо". может плохо читал. если убрать требование "типа команда выполняется по принципу дернул и забыл", то чем плох реально возврат какого-то результата?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878430
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Prolove_bachесли я правильно понял, тут про какой-то фоновый сервис хвост имел в виду. у меня такого нетон имел ввиду CQRS

да какая разница
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878434
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachесли я правильно понял, тут про какой-то фоновый сервис хвост имел в виду. у меня такого нет
Можно в пределах одного процесса - ничего не мешает. Отправитель - в одном потоке, обработчик - в другом. Делаешь абстракцию (интерфейс) типа ICommandBus, все команды пускаешь через неё. Если потом захочется переехать на микросервисы/распределенку, то проблем никаких - делаешь просто другую реализацию ICommandBus (через RabbitMQ, или Azure Queue Storage, например) и все - мягко, гладко и безболезненно переезжаешь. Можно при этом даже запросто распараллелить обработку команд сразу на несколько узлов.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878435
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachShocker.Proпропущено...
он имел ввиду CQRS

да какая разница

в смысле фоновый сервис что с CQRS, что нет
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878439
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachесли я правильно понял, тут про какой-то фоновый сервис хвост имел в виду. у меня такого нет
Можно в пределах одного процесса - ничего не мешает. Отправитель - в одном потоке, обработчик - в другом. Делаешь абстракцию (интерфейс) типа ICommandBus, все команды пускаешь через неё. Если потом захочется переехать на микросервисы/распределенку, то проблем никаких - делаешь просто другую реализацию ICommandBus (через RabbitMQ, или Azure Queue Storage, например) и все - мягко, гладко и безболезненно переезжаешь. Можно при этом даже запросто распараллелить обработку команд сразу на несколько узлов.

оу, астанавись!
я не про это сейчас - а тупо про возврат из команды
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878442
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachя не про это сейчас - а тупо про возврат из команды
Принцип "дернул и забыл" без возврата результата дает больше возможности для последующей модификации архитектуры. Если ты сделаешь с возвратом результата, то ты уже будешь навеки привязан к "дернул и ждем".
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878447
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachя не про это сейчас - а тупо про возврат из команды
Принцип "дернул и забыл" без возврата результата дает больше возможности для последующей модификации архитектуры. Если ты сделаешь с возвратом результата, то ты уже будешь навеки привязан к "дернул и ждем".

ок, это аргумент, если есть такое требование
а если нет такого требования?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878460
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachа если нет такого требования?
А если нет такого требования, а потом будет? :))
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878468
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachа если нет такого требования?
А если нет такого требования, а потом будет? :))

хз

PS
ушел в печале думать над архитектурой
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878528
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachушел в печале думать над архитектурой
Если ты не победитель шоу "битва экстрасенсов", то забей и не пытайся предъугодать будущее. Ты предусмотришь любые изменения вдоль и поперек, а оно изменится по диагонали. Пройдено неоднократно.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878538
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Ну, какбэ, хорошая архитектура, паттерны, SOLID и т.п. это таки совсем не только чтобы "предугадать будущее".
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878575
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachне по теме сабжа вопрос:
1. а почему плохо? можешь пример привести?
2. "так как команда может выполнится асинхронно" - await?

1. потому что команда может быть выполнена отложено, и результат будет позже. на начальном и даже среднем этапе разработки это не так очевидно, вылазит гораздо позже.

2. async в данном случае это для взаимодействия с асинхронными интерфейсами (апи, бд, файловая система, и т.п.), но на то то и команда, что может встать в очередь выполнения, или это может быть тяжёлая операция, которую не стоит ожидать.

в случае обязательного типа ответа, придётся городить костыли, что-то типа "пустое значение", так как void нельзя указывать в качестве типа. и на лицо кривой интерфейс.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878647
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachне по теме сабжа вопрос:
1. а почему плохо? можешь пример привести?
2. "так как команда может выполнится асинхронно" - await?

1. потому что команда может быть выполнена отложено, и результат будет позже. на начальном и даже среднем этапе разработки это не так очевидно, вылазит гораздо позже.

2. async в данном случае это для взаимодействия с асинхронными интерфейсами (апи, бд, файловая система, и т.п.), но на то то и команда, что может встать в очередь выполнения, или это может быть тяжёлая операция, которую не стоит ожидать.

в случае обязательного типа ответа, придётся городить костыли, что-то типа "пустое значение", так как void нельзя указывать в качестве типа. и на лицо кривой интерфейс.

я так понял, что это все в "асинхронное взаимодействие" мотивировано. а если его нет, то вдруг оно появится
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878656
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttв случае обязательного типа ответа, придётся городить костыли, что-то типа "пустое значение", так как void нельзя указывать в качестве типа. и на лицо кривой интерфейс.
Ну, можно ведь просто два интерфейса сделать. ICommandHandler<TCommand, TResult> и ICommandHandler<TCommand> - такое сплошь и рядом. Для Task тоже два типа определены.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878750
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachя так понял, что это все в "асинхронное взаимодействие" мотивировано. а если его нет, то вдруг оно появится

Нет, мотивировано не этим, это просто один из вариантов развития.
Команда это не функция -- вот основное отличие. Наличие возможности возвращать результат неизбежно приводит к тому, что команды начинают применять, как функции, что вредит архитектурному принципу.

Например, в команду переносят валидацию, проверки, хотя они должны быть выполнены до запуска команды.
Или вычисление результата, команда не вычисляет результат, она вносит изменения в систему.

Если приводить аналогию с SQL, то это как INSERT/UPDATE/DELETE -- каких вы результатов ожидаете?
Единственное противоречие, которое не бьётся с командой, это идентификатор, который вычисляется на стороне БД при вставке записи в таблицу.

Как решается, я писал выше.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39878751
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttв случае обязательного типа ответа, придётся городить костыли, что-то типа "пустое значение", так как void нельзя указывать в качестве типа. и на лицо кривой интерфейс.
Ну, можно ведь просто два интерфейса сделать. ICommandHandler<TCommand, TResult> и ICommandHandler<TCommand> - такое сплошь и рядом. Для Task тоже два типа определены.

Этого не достаточно.
Придётся сделать 2 метода у ICommandBus
Придётся сделать 2 интерфейса для самой команды.

Всё станет сложнее минимум в 2 раза. На самом деле более, чем в 2 раза.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39882861
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Код: c#
1.
2.
3.
4.
5.
public interface ICommandHandler<TCommand>
    where TCommand: CommandBase
{
   Task HandleAsync<TCommand>(TCommand command, CancellationToken ct);
}




Вот такого интерфейса достаточно, не нужно городить TResult, команда не должна ничего возвращать. Если нужно получать данные (например, идентификатор созданной сущности), то это делается двумя путями:

1. хороший: через отдельное событие, на которое клиент подписывается, так как команда может выполнится асинхронно
2. средненькой паршивости: записывать данные прям в объект переданной команды.

но что-то там возвращать -- совсем плохо.

отбросим асинхронность, меня пока это не интересует:
1. если через событие, то после вызова команды в контроллере надо сделать запрос? иначе где там ловить событие в методе, где нужно возвращаемое значение
2. "средненькую паршивость" можно как-то явно обозначить (префиксы Out к свойствам команды, ...)? или это получится "совсем плохо"?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883231
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
события у меня и так были, но не для "возврата из команды", а как "доменные события". как с ними связать что предложил хвост, не догнал. сделал "средненькую паршивость" - какое-то интуитивное сомнение закралось, что плохо возвращать из команд return-ом. может я просто сильно ведусь
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883235
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach,

что именно из команд вы хотите возвращать?
айдишник созданной записи? что ещё?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883242
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach,

если команда у вас что-то достаёт/вычисляет/преобразовывает и вы хотите это куда-то передать/отобразить, то вы неправильно используете концепцию команд и неизбежно наполучаете граблями по лбу и по заднему место, больно :)
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883244
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчто именно из команд вы хотите возвращать?
айдишник созданной записи? что ещё?
Мы когда-то пришли к идее использовать пару айдишек - один автоинкрементный для БД, второй "внешний" guid, который генерится сразу в приложении еще до вставки записи.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883251
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttчто именно из команд вы хотите возвращать?
айдишник созданной записи? что ещё?
Мы когда-то пришли к идее использовать пару айдишек - один автоинкрементный для БД, второй "внешний" guid, который генерится сразу в приложении еще до вставки записи.

тогда можно было и отказаться от автоинкремента и просто сделать свой гуид примари
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883270
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bach,

что именно из команд вы хотите возвращать?
айдишник созданной записи? что ещё?

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

в целом хвост - спасибо

просто интересно - если бы ну вот сильно сильно надо было , то как?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883274
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bach,

если команда у вас что-то достаёт/вычисляет/преобразовывает и вы хотите это куда-то передать/отобразить, то вы неправильно используете концепцию команд и неизбежно наполучаете граблями по лбу и по заднему место, больно :)

да, команда преобразовывает - нормализует номер мобилы и пр. данные. и возвращала (сейчас "по паршивенькому варианту") она структуру с этим номером и пр. данные, нормализованными. внутри себя она использовала сервисы нормлизации
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883276
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachhVosttlove_bach,

если команда у вас что-то достаёт/вычисляет/преобразовывает и вы хотите это куда-то передать/отобразить, то вы неправильно используете концепцию команд и неизбежно наполучаете граблями по лбу и по заднему место, больно :)

да, команда преобразовывает - нормализует номер мобилы и пр. данные. и возвращала (сейчас "по паршивенькому варианту") она структуру с этим номером и пр. данные, нормализованными. внутри себя она использовала сервисы нормлизации

вынести эту нормализацию из команды?
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883278
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachlove_bachпропущено...


да, команда преобразовывает - нормализует номер мобилы и пр. данные. и возвращала (сейчас "по паршивенькому варианту") она структуру с этим номером и пр. данные, нормализованными. внутри себя она использовала сервисы нормлизации

вынести эту нормализацию из команды?

точно!
бл*, она еще и в валидаторах, типа если могу - нормализирую.
придется и это еще исправить
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883281
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтогда можно было и отказаться от автоинкремента и просто сделать свой гуид примари
Гуид примари для кластерного индекса это не очень хорошо, потому что он не sequential и это сильно тормозит вставку. Тут разве что если генерить последовательные гуиды (в сиквеле есть готовая ф-ия, на клиенте немного сложнее, но вполне решаемо). Но, собственно, пара айдишек на деле совсем не напрягает, тем более у нас эти "внешние" guid-ы почти везде используются только для корней агрегатов.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883306
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на клиенте генерировать последовательные гуиды, тогда можно с тем же успехом генерить последовательные инты ))
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883317
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсли на клиенте генерировать последовательные гуиды, тогда можно с тем же успехом генерить последовательные инты ))

он имел ввиду не глабальные, наверное, а для этого места
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883370
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachпросто интересно - если бы ну вот сильно сильно надо было , то как?

в идеале, подписываться на события, которые генерит команда.
два варианта подписки:
1. постоянная подписка, логика отдельно, хорошо.
2. разовая подписка на изменение, тогда командам хорошо бы иметь свои ид-шники, приемлимое решение

суть в том, что команда может генерировать множество событий, ещё команда может вызывать вложенные команды, а вам может понадобится только какое-то конкретное событие.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883371
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachlove_bachвынести эту нормализацию из команды?

точно!
бл*, она еще и в валидаторах, типа если могу - нормализирую.
придется и это еще исправить

да, отличная идея :)
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883372
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttтогда можно было и отказаться от автоинкремента и просто сделать свой гуид примари
Гуид примари для кластерного индекса это не очень хорошо, потому что он не sequential и это сильно тормозит вставку. Тут разве что если генерить последовательные гуиды (в сиквеле есть готовая ф-ия, на клиенте немного сложнее, но вполне решаемо). Но, собственно, пара айдишек на деле совсем не напрягает, тем более у нас эти "внешние" guid-ы почти везде используются только для корней агрегатов.

если скорость вставки так критична, то да, норм решение
не думаю, что стоит заморачиваться с генерацией последовательных гуидов )
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883415
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttтогда можно было и отказаться от автоинкремента и просто сделать свой гуид примари
Гуид примари для кластерного индекса это не очень хорошо, потому что он не sequential и это сильно тормозит вставку. Тут разве что если генерить последовательные гуиды (в сиквеле есть готовая ф-ия, на клиенте немного сложнее, но вполне решаемо). Но, собственно, пара айдишек на деле совсем не напрягает, тем более у нас эти "внешние" guid-ы почти везде используются только для корней агрегатов.
Можно делать некластерным (primary key nonclustered), проблему со скоростью вставки это вполне решает (но надо смотреть как это отразиться на скорости других запросов).
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883706
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне думаю, что стоит заморачиваться с генерацией последовательных гуидов )
На самом деле, это очень просто, у меня где-то даже готовый код валяется для этого. МС-овский гуид (UUID версии 4) - это просто случайные биты (кроме то ли шести то ли семи фиксированных). Достаточно взять "обычный" гуид и часть старших битов заменить на таймстемп. Возможны правда сбои в порядке при одновременной генерации на разных узлах, но если их вероятностью можно пренебречь, то все должно быть ок.
...
Рейтинг: 0 / 0
Маркерный интерфейс
    #39883862
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

недавно была дискуссия https://www.sql.ru/forum/1287606/vnyatno-obyasnit-pochemu-klasterizovannyy-indeks-po-guid-huzhe-int

я бы всёж не заморачивался с этим до реальных замеров в конкретном кейсе. ну медленнее вставка будет, вопрос насколько? создаёт ли это проблемы с текущей пиковой нагрузкой? а если нужен шардинг, то что? ну и т.д. :)
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Маркерный интерфейс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]