|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat hVostt Ты сварганил "на коленке" медиатор. Т.е. ты не видишь, что сделал медиатор? Ну ок.. fkthat hVostt это тот же свитч И ты не видишь, что логика свитча легко прослеживается? Там даже место есть, которое можно было бы развернуть в обычный свитч? Ну ок-ок.. fkthat hVostt Ты реши задачи свитч/визитёр, на не предлагай решение для совершенно других задач. hVostt когда расширение IsNull() действительно может принести пользу? Ну штош. Выводы. Тебе не нравится визитор, потому что "он плахой", без объяснения причин :) А свитч тожа плахой... Ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 11:39 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt что сделал медиатор Хорошо - пусть будет медиатор. И класс Program это тоже медиатор, который медиирует все входные данные и код их обработки ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 12:57 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat hVostt что сделал медиатор Хорошо - пусть будет медиатор. И класс Program это тоже медиатор, который медиирует все входные данные и код их обработки Что значит "пусть будет"? Это медиатор, явный стопудовый медиатор. Единственная проблема в твоём коде, что ты его не доделал. Код: c# 1. 2. 3.
Если ты предлагаешь каждому клиенту вот такой хернёй страдать, то это говнокодище просто адское :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 13:17 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat, К слову, зачем пилить костыли, когда всё уже давно написано: https://github.com/jbogard/MediatR/wiki#requestresponse ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 13:19 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt fkthat, К слову, зачем пилить костыли, когда всё уже давно написано: https://github.com/jbogard/MediatR/wiki#requestresponse Я прекрасно про это знаю, и использовал. Просто тпоказал, как все это легко можно делать без свича на стопятьсот кейсов. hVostt Если ты предлагаешь каждому клиенту Нет, конечно. Опять-таки, это только пример, как нормальные люди свич без свича делают. Или, может быть, у вас и для массива из полсотни переменных тоже заводят int x1, x2, ..., x50; ?) Ну а что, если у вас в ПХП запросто пишут свич дюжин на пять кейсов (я сам такое видел), то я вполне поверю и в массивы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 13:55 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
И то, что MediatR назвали медиатром еще не делает его медиатором. Назвать его могли хоть дикобразом, если бы захотели. hVostt Тебе не нравится визитор, потому что "он плахой", без объяснения причин Я не писал, что мне он не нравится или он плохой, разве что если в шутку. Для C++ это очень изящный паттерн и его небольшие (даже и не технические, а, скорее идеологические) недостатки они ничтожны по сравнению с преимуществами. Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.) обработку и так можно распедалить по обработчикам не прибегая к каким-то специальным приемам. В визиторе по факту просто эмулируется RTTI - визитируемый объект за счет того, что знает свой тип выбирает тот или иной вызов визитора. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 14:21 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat hVostt fkthat, К слову, зачем пилить костыли, когда всё уже давно написано: https://github.com/jbogard/MediatR/wiki#requestresponse Я прекрасно про это знаю, и использовал. Просто тпоказал, как все это легко можно делать без свича на стопятьсот кейсов. Это не замена свича, ещё раз. И ты никак не прокомментировал те проблемы, которые здесь также уместны, как и у свича. fkthat Нет, конечно. Опять-таки, это только пример, как нормальные люди свич без свича делают. Фигню какую-то говоришь. Нормальные люди хлеб ножом режут, а дрова топором рубят. Ты в какой-то нездоровый фанатизм ударился, говоришь нож не нужен, всё топором можно делать. Другую задачу совершенно решает твой код, это медиатор, известно за какой профит надо так изъёбываться с огромных нагромождением интерфейсов и классов. У тебя какая-то каша в голове натуральная :) fkthat Ну а что, если у вас в ПХП запросто пишут свич дюжин на пять кейсов (я сам такое видел), то я вполне поверю и в массивы. Если ты видел, как ножом операцию на глаз делают, и это тебя возмутило -- это не значит, что как инструмент нож -- плохой. Это же детский сад какой-то. Давай как инженеры рассуждать, а не как бабки базарные :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 14:54 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat И то, что MediatR назвали медиатром еще не делает его медиатором. Назвать его могли хоть дикобразом, если бы захотели. Пля, это и есть медиатор. Как его назвали -- дело десятое. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 14:55 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.) Да что ты говоришь! А то на C++ нельзя дискриминатор добавить и базовый интерфейс. Прям C++ ущербней, чем C# ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 14:56 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.) обработку и так можно распедалить по обработчикам не прибегая к каким-то специальным приемам. Не говори ерунды. Рефлексия в C# так-то и есть "специальный приём", посмотри на внутренности MediatR, сколько же там "готового" и сколько там приёмов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Выбирай удобный дискриминатор, и всё, отличий практически никаких не будет. А визитор совершенно другие задачи решает. Просто опыта у тебя пока не хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 15:10 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt нельзя дискриминатор добавить Можно, где я говорил что нельзя. Это и есть другой способ изобретения своего RTTI за отстутствием готового. И, в отличии от визитора, этот способ это действительно гамно. Во-первых, надо заморачиваться хотя бы уже над тем, чтобы дискриминаторы были уникальные (при том, что ты можешь захотеть раскидать производные классы по разным сборкам/библиотекам, т.ч. список констант тебя тут не выручит). Во-вторых, что самое важное, операция кастинга все равно останется небезопасной - допустим, у тебя какой-то объект из-за очепятки в коде вернет тебе дискриминатор не своего типа, потом ты его возьмешь и апкастишь к этому типу, и тогда у тебя случится джоппа, причем, очень вероятно вообще космических масштабов - будешь сидеть потом по ночам и дампы мемасика разгребать. Визитор же делает все это абсолютно безопасным способом. Но, просто, еще раз, - в дотнете этого просто-напросто не требуется, потому что и так все делается и прямолинейно без "миска поит кота", и при этом безопасно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 15:20 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt Рефлексия в C# так-то и есть "специальный приём" Using в C# это так-то тоже специальный прием. Но, хорошо, раз ты сказал, то перепишем теперь все на try/finally, чтобы не прибегать к "специальным приемам" hVostt посмотри на внутренности MediatR, сколько же там "готового" Я и так на него почти каждый день смотрю, потому что мы его используем. Или ты по примеру кода на скуле решил что я его из продакшена взял? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 15:26 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt Выбирай удобный дискриминатор У меня и так есть готовый дескриминатор. GetType() называется. Но, если ты про него не знаешь, то можешь делать свои дискриминаторы, кто же тебе запретит ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 15:29 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat, Ок, пофигу, раз в твоей картине мира медиатор это улучшенная версия свича (топор -- улучшенная версия ножа, ага-ага), ты объясни, как твой медиатор решает проблемы свича? Визитор -- решает. А твой медиатор -- нет. В чём смысл того, за что ты топишь? :) Ты как бы говоришь, визитор хороший только в C++, а в C# плохой, ну потому что в C# есть GetType() (мухахха), ну ок -- это прям субъективное твоё мнение, спорить бесполезно, принимаем. И что дальше-то? Он же не решает проблемы свича, которые решает визитор )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 16:05 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt как твой медиатор решает проблемы свича У меня не медиатор и я как раз не собираюсь, как ты, медиатором решать проблемы свича Ты прочитал книгу Гамма сотоварищи, чтобы собеседование на работу пройти, поэтому сейчас упираешься в какие-то очень частные реализации из интернета, а общей картины не понимаешь Медиатор для того чтобы лапшевидный говнограф взаимодействий и зависимостей кучи объектов друг с другом заменить простой схемой где каждый объект взаимодействует только с общим объектом-медиатором. И он может быть реализован вообще без всяких абстракций, полиморфизма, наследования и т.п.- требуется только что каждый объект знает про медиатор, а медиатор знает о каждом из объектов, над которыми он медитирует. Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например, паблишить события, на которые медиатор подписывается. Например, винформовская форма, в случае простейшего использования (без MVVM и прочих) это пример медиатора своих дочерних контролов - кнопка "баттон" не меняет напрямую цвет текста "текстбокс", а делает это через форму (вызовом баттон-клика через свое событие), а текстбокс в свою очередь при вводе текста не меняет напрямую надпись на кнопке, а тоже отправляет событие форме, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 16:34 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt ты объясни, как твой медиатор решает проблемы свича Так и решает. Если у меня появляется новая команда (т.е. новый кейс), то я просто наследую её от абстрактной, пишу для неё отдельный обработчик ICommandHandler, или добавляю её обработку в существующий и регаю эго (а в реале это вообще будет все готовое через DI). В уже существующий код, в отличие от свича, я при этом вообще не лезу, могу все разработчики раскидать/сгруппировать так как мне удобно по отдельным классам, неймспейсам, сборкам и прочему, и мне не нужна нечитабельная свичевая простыня, где для каждой из стопятьсот команд отдельный кейс, так, как ты наизобретал со своими дискриминантами. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 16:55 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat У меня не медиатор и я как раз не собираюсь, как ты, медиатором решать проблемы свича Ну объективно код, который ты привёл -- это медиатор. Как ты там лично для себя считаешь, это уже вопрос твоих личных фантазий. fkthat Ты прочитал книгу Гамма сотоварищи, чтобы собеседование на работу пройти, поэтому сейчас упираешься в какие-то очень частные реализации из интернета, а общей картины не понимаешь Я не упираюсь, это объективная реальность. Вот как раз ты сам себе противоречишь ) fkthat Медиатор для того чтобы лапшевидный говнограф взаимодействий и зависимостей кучи объектов друг с другом заменить простой схемой где каждый объект взаимодействует только с общим объектом-медиатором. И он может быть реализован вообще без всяких абстракций, полиморфизма, наследования и т.п.- требуется только что каждый объект знает про медиатор, а медиатор знает о каждом из объектов, над которыми он медитирует. Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например, паблишить события, на которые медиатор подписывается. Например, винформовская форма, в случае простейшего использования (без MVVM и прочих) это пример медиатора своих дочерних контролов - кнопка "баттон" не меняет напрямую цвет текста "текстбокс", а делает это через форму (вызовом баттон-клика через свое событие), а текстбокс в свою очередь при вводе текста не меняет напрямую надпись на кнопке, а тоже отправляет событие форме, и т.д. Ты рассказал как раз про свой код, который привёл :) И это медиатор. Медатор это не обязательно про события, если что. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 16:55 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat ак и решает. Если у меня появляется новая команда (т.е. новый кейс), то я просто наследую её от абстрактной, пишу для неё отдельный обработчик ICommandHandler, или добавляю её обработку в существующий и регаю эго (а в реале это вообще будет все готовое через DI). В уже существующий код, в отличие от свича, я при этом вообще не лезу, могу все разработчики раскидать/сгруппировать так как мне удобно по отдельным классам, неймспейсам, сборкам и прочему, и мне не нужна нечитабельная свичевая простыня, где для каждой из стопятьсот команд отдельный кейс, так, как ты наизобретал со своими дискриминантами. Ты можешь: 1. забыть написать отедельный обработчик 2. забыть его зарегистрировать то, что ты там куда-то "не лезешь", имеет и обратную сторону. Теперь из прикладного кода добраться до хендлера невозможно обычным способом. У меня был на руках проект, построенный полностью на этой архитектуре, разработчики, которые его писали, матом крыли ОРХИТЕКТОРА , который так придумал. Рассказывают, что это полный ппц и боль. И не надо травить байки про слабую связанность, бла-бла, где хочешь обработчик свой разместил, ага, да нахер это не упёрлось обычному рядовому прикладному разработчику. Нужно писать простой код, вопрос гибкости и расширяемости это для разработчиков core-платформы. Хуже нет, когда прикладники начинают лезть в core со своим ограниченным опытом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:02 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt Ну объективно код, который ты привёл -- это медиатор. hVostt И это медиатор hVostt Я не упираюсь, это объективная реальность. hVostt Медатор это не обязательно про события, если что. fkthat Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например , паблишить события, на которые медиатор подписывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:07 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat hVostt Ну объективно код, который ты привёл -- это медиатор. hVostt И это медиатор Я не могу спорить с твоим субъективным восприятием. Принимаю, что лично для тебя -- это нет. Все коллеги, с которыми я работаю и работал -- они знают, что это медиатор, значит мы с ними общаемся эффективно на одном языке. Я даж не знаю, _что это такое_ у тебя в фантазиях, если не медиатор ))) Хоть бы дал имя _этому_. Продвинутый шарп-свитч? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:12 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat Я об этом написал, ты просто не читал. fkthat Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например , паблишить события, на которые медиатор подписывается. Куда они "паблишат"? В космос чтоли? ))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:12 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat медиатор подписывается Если что, медиатор никуда не подписывается :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:14 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt Теперь из прикладного кода добраться до хендлера невозможно обычным способом. Во первых, зачем он тебе напрямую? А, во-вторых, почему нельзя? Сделай его паблик класс, и добирайся как хочешь, если тебе так это горит (непонятно только, опять-таки, зачем - ты же не паришься, когда инжектишь по DI интерфейсы вместо реализаций). А можешь даже все его приватные поля сразу объявить как паблик, чтобы добираться можно было ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:15 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
hVostt Хуже нет, когда прикладники начинают лезть в core со своим ограниченным опытом. Хорошо, если такой системщик всех системщиков не разрешает, то лезть не будем, уговорил ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:18 |
|
IDisposable и структуры
|
|||
---|---|---|---|
#18+
fkthat hVostt Теперь из прикладного кода добраться до хендлера невозможно обычным способом. Во первых, зачем он тебе напрямую? А, во-вторых, почему нельзя? Сделай его паблик класс, и добирайся как хочешь, если тебе так это горит (непонятно только, опять-таки, зачем - ты же не паришься, когда инжектишь по DI интерфейсы вместо реализаций). А можешь даже все его приватные поля сразу объявить как паблик, чтобы добираться можно было Что значит зачем? Мне нужно попасть в реализацию. Как мне это сделать быстро? Нужно найти все usages команды и найти среди них реализацию хендлера. А если хендлера больше, чем один? И по какой-то упоротой логике подключается либо один, либо второй, либо третий. Какой в итоге тот самый? На маленьких проектах это не так болезненно. А когда всё абсолютно сделано через медиатор, начинается ад. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 17:19 |
|
|
start [/forum/topic.php?fid=18&msg=40026955&tid=1354589]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 409ms |
0 / 0 |