powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IDisposable и структуры
25 сообщений из 109, страница 4 из 5
IDisposable и структуры
    #40026747
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ты сварганил "на коленке" медиатор.
Медиатор совсем для другого, несмотря на схожесть.авторПосредник (англ. Mediator) — поведенческий шаблон проектирования, обеспечивающий взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.


Т.е. ты не видишь, что сделал медиатор?

Ну ок..


fkthat
hVostt
это тот же свитч
Скопируй это к себе в редактор ПХП и сделай Ctrl-F по слову switch


И ты не видишь, что логика свитча легко прослеживается? Там даже место есть, которое можно было бы развернуть в обычный свитч?

Ну ок-ок..


fkthat
hVostt
Ты реши задачи свитч/визитёр, на не предлагай решение для совершенно других задач.
Проехали. Забей.
hVostt
когда расширение IsNull() действительно может принести пользу?
Забей. Проехали.


Ну штош. Выводы. Тебе не нравится визитор, потому что "он плахой", без объяснения причин :)
А свитч тожа плахой...

Ок.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026789
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
что сделал медиатор

Хорошо - пусть будет медиатор. И класс Program это тоже медиатор, который медиирует все входные данные и код их обработки
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026803
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
что сделал медиатор

Хорошо - пусть будет медиатор. И класс Program это тоже медиатор, который медиирует все входные данные и код их обработки


Что значит "пусть будет"? Это медиатор, явный стопудовый медиатор.

Единственная проблема в твоём коде, что ты его не доделал.

Код: c#
1.
2.
3.
Command cmd = new FooCommand();
var handler = factory.GetCommandHandler(cmd.GetType());
handler.HandleCommand(cmd);



Если ты предлагаешь каждому клиенту вот такой хернёй страдать, то это говнокодище просто адское :)
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026804
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

К слову, зачем пилить костыли, когда всё уже давно написано:

https://github.com/jbogard/MediatR/wiki#requestresponse
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026824
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
fkthat,

К слову, зачем пилить костыли, когда всё уже давно написано:

https://github.com/jbogard/MediatR/wiki#requestresponse

Я прекрасно про это знаю, и использовал. Просто тпоказал, как все это легко можно делать без свича на стопятьсот кейсов.
hVostt
Если ты предлагаешь каждому клиенту

Нет, конечно. Опять-таки, это только пример, как нормальные люди свич без свича делают. Или, может быть, у вас и для массива из полсотни переменных тоже заводят int x1, x2, ..., x50; ?) Ну а что, если у вас в ПХП запросто пишут свич дюжин на пять кейсов (я сам такое видел), то я вполне поверю и в массивы.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026832
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

И то, что MediatR назвали медиатром еще не делает его медиатором. Назвать его могли хоть дикобразом, если бы захотели.

hVostt
Тебе не нравится визитор, потому что "он плахой", без объяснения причин

Я не писал, что мне он не нравится или он плохой, разве что если в шутку. Для C++ это очень изящный паттерн и его небольшие (даже и не технические, а, скорее идеологические) недостатки они ничтожны по сравнению с преимуществами. Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.) обработку и так можно распедалить по обработчикам не прибегая к каким-то специальным приемам. В визиторе по факту просто эмулируется RTTI - визитируемый объект за счет того, что знает свой тип выбирает тот или иной вызов визитора.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026847
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
fkthat,

К слову, зачем пилить костыли, когда всё уже давно написано:

https://github.com/jbogard/MediatR/wiki#requestresponse

Я прекрасно про это знаю, и использовал. Просто тпоказал, как все это легко можно делать без свича на стопятьсот кейсов.


Это не замена свича, ещё раз.

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

fkthat
Нет, конечно. Опять-таки, это только пример, как нормальные люди свич без свича делают.


Фигню какую-то говоришь. Нормальные люди хлеб ножом режут, а дрова топором рубят.
Ты в какой-то нездоровый фанатизм ударился, говоришь нож не нужен, всё топором можно делать.

Другую задачу совершенно решает твой код, это медиатор, известно за какой профит надо так изъёбываться с огромных нагромождением интерфейсов и классов.

У тебя какая-то каша в голове натуральная :)


fkthat
Ну а что, если у вас в ПХП запросто пишут свич дюжин на пять кейсов (я сам такое видел), то я вполне поверю и в массивы.


Если ты видел, как ножом операцию на глаз делают, и это тебя возмутило -- это не значит, что как инструмент нож -- плохой. Это же детский сад какой-то.

Давай как инженеры рассуждать, а не как бабки базарные :)
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026848
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat

И то, что MediatR назвали медиатром еще не делает его медиатором. Назвать его могли хоть дикобразом, если бы захотели.


Пля, это и есть медиатор. Как его назвали -- дело десятое.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026849
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.)


Да что ты говоришь! А то на C++ нельзя дискриминатор добавить и базовый интерфейс. Прям C++ ущербней, чем C#
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026863
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Но для дотнет это просто не нужно, потому что за счет уже готового RTTI (GetType и проч.) обработку и так можно распедалить по обработчикам не прибегая к каким-то специальным приемам.


Не говори ерунды. Рефлексия в C# так-то и есть "специальный приём", посмотри на внутренности MediatR, сколько же там "готового" и сколько там приёмов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class BaseCommand {
 protected:
  int type_;

 public:
  BaseCommand(int t) : type_(t) {
  }
};



Выбирай удобный дискриминатор, и всё, отличий практически никаких не будет.

А визитор совершенно другие задачи решает. Просто опыта у тебя пока не хватает.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026872
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
нельзя дискриминатор добавить

Можно, где я говорил что нельзя. Это и есть другой способ изобретения своего RTTI за отстутствием готового. И, в отличии от визитора, этот способ это действительно гамно. Во-первых, надо заморачиваться хотя бы уже над тем, чтобы дискриминаторы были уникальные (при том, что ты можешь захотеть раскидать производные классы по разным сборкам/библиотекам, т.ч. список констант тебя тут не выручит). Во-вторых, что самое важное, операция кастинга все равно останется небезопасной - допустим, у тебя какой-то объект из-за очепятки в коде вернет тебе дискриминатор не своего типа, потом ты его возьмешь и апкастишь к этому типу, и тогда у тебя случится джоппа, причем, очень вероятно вообще космических масштабов - будешь сидеть потом по ночам и дампы мемасика разгребать. Визитор же делает все это абсолютно безопасным способом. Но, просто, еще раз, - в дотнете этого просто-напросто не требуется, потому что и так все делается и прямолинейно без "миска поит кота", и при этом безопасно.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026875
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Рефлексия в C# так-то и есть "специальный приём"

Using в C# это так-то тоже специальный прием. Но, хорошо, раз ты сказал, то перепишем теперь все на try/finally, чтобы не прибегать к "специальным приемам"

hVostt
посмотри на внутренности MediatR, сколько же там "готового"

Я и так на него почти каждый день смотрю, потому что мы его используем. Или ты по примеру кода на скуле решил что я его из продакшена взял?
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026878
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Выбирай удобный дискриминатор

У меня и так есть готовый дескриминатор. GetType() называется. Но, если ты про него не знаешь, то можешь делать свои дискриминаторы, кто же тебе запретит
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026911
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Ок, пофигу, раз в твоей картине мира медиатор это улучшенная версия свича (топор -- улучшенная версия ножа, ага-ага), ты объясни, как твой медиатор решает проблемы свича?

Визитор -- решает.
А твой медиатор -- нет.

В чём смысл того, за что ты топишь? :)

Ты как бы говоришь, визитор хороший только в C++, а в C# плохой, ну потому что в C# есть GetType() (мухахха), ну ок -- это прям субъективное твоё мнение, спорить бесполезно, принимаем.

И что дальше-то? Он же не решает проблемы свича, которые решает визитор ))))
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026932
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
как твой медиатор решает проблемы свича

У меня не медиатор и я как раз не собираюсь, как ты, медиатором решать проблемы свича

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

Медиатор для того чтобы лапшевидный говнограф взаимодействий и зависимостей кучи объектов друг с другом заменить простой схемой где каждый объект взаимодействует только с общим объектом-медиатором. И он может быть реализован вообще без всяких абстракций, полиморфизма, наследования и т.п.- требуется только что каждый объект знает про медиатор, а медиатор знает о каждом из объектов, над которыми он медитирует. Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например, паблишить события, на которые медиатор подписывается. Например, винформовская форма, в случае простейшего использования (без MVVM и прочих) это пример медиатора своих дочерних контролов - кнопка "баттон" не меняет напрямую цвет текста "текстбокс", а делает это через форму (вызовом баттон-клика через свое событие), а текстбокс в свою очередь при вводе текста не меняет напрямую надпись на кнопке, а тоже отправляет событие форме, и т.д.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026941
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
ты объясни, как твой медиатор решает проблемы свича

Так и решает. Если у меня появляется новая команда (т.е. новый кейс), то я просто наследую её от абстрактной, пишу для неё отдельный обработчик ICommandHandler, или добавляю её обработку в существующий и регаю эго (а в реале это вообще будет все готовое через DI). В уже существующий код, в отличие от свича, я при этом вообще не лезу, могу все разработчики раскидать/сгруппировать так как мне удобно по отдельным классам, неймспейсам, сборкам и прочему, и мне не нужна нечитабельная свичевая простыня, где для каждой из стопятьсот команд отдельный кейс, так, как ты наизобретал со своими дискриминантами.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026942
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
У меня не медиатор и я как раз не собираюсь, как ты, медиатором решать проблемы свича


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

fkthat
Ты прочитал книгу Гамма сотоварищи, чтобы собеседование на работу пройти, поэтому сейчас упираешься в какие-то очень частные реализации из интернета, а общей картины не понимаешь


Я не упираюсь, это объективная реальность.

Вот как раз ты сам себе противоречишь )


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


Ты рассказал как раз про свой код, который привёл :)
И это медиатор.

Медатор это не обязательно про события, если что.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026948
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
ак и решает. Если у меня появляется новая команда (т.е. новый кейс), то я просто наследую её от абстрактной, пишу для неё отдельный обработчик ICommandHandler, или добавляю её обработку в существующий и регаю эго (а в реале это вообще будет все готовое через DI). В уже существующий код, в отличие от свича, я при этом вообще не лезу, могу все разработчики раскидать/сгруппировать так как мне удобно по отдельным классам, неймспейсам, сборкам и прочему, и мне не нужна нечитабельная свичевая простыня, где для каждой из стопятьсот команд отдельный кейс, так, как ты наизобретал со своими дискриминантами.


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

то, что ты там куда-то "не лезешь", имеет и обратную сторону.

Теперь из прикладного кода добраться до хендлера невозможно обычным способом.

У меня был на руках проект, построенный полностью на этой архитектуре, разработчики, которые его писали, матом крыли ОРХИТЕКТОРА , который так придумал. Рассказывают, что это полный ппц и боль.

И не надо травить байки про слабую связанность, бла-бла, где хочешь обработчик свой разместил, ага, да нахер это не упёрлось обычному рядовому прикладному разработчику. Нужно писать простой код, вопрос гибкости и расширяемости это для разработчиков core-платформы.

Хуже нет, когда прикладники начинают лезть в core со своим ограниченным опытом.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026952
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну объективно код, который ты привёл -- это медиатор.
Нет.
hVostt
И это медиатор
Нет.

hVostt
Я не упираюсь, это объективная реальность.
Это реальность объективная ровно настолько же, насколько твой разум, потому что только там она и существует

hVostt
Медатор это не обязательно про события, если что.
Я об этом написал, ты просто не читал.
fkthat
Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например , паблишить события, на которые медиатор подписывается.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026953
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ну объективно код, который ты привёл -- это медиатор.
Нет.
hVostt
И это медиатор
Нет.


Я не могу спорить с твоим субъективным восприятием.
Принимаю, что лично для тебя -- это нет.

Все коллеги, с которыми я работаю и работал -- они знают, что это медиатор, значит мы с ними общаемся эффективно на одном языке.

Я даж не знаю, _что это такое_ у тебя в фантазиях, если не медиатор )))
Хоть бы дал имя _этому_.

Продвинутый шарп-свитч?
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026954
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Я об этом написал, ты просто не читал.
fkthat
Объекты, причем, могут и не вызывать напрямую медиатор, и даже не знать о нем, а, например , паблишить события, на которые медиатор подписывается.


Куда они "паблишат"? В космос чтоли? )))))))
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026955
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
медиатор подписывается


Если что, медиатор никуда не подписывается :)
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026956
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Теперь из прикладного кода добраться до хендлера невозможно обычным способом.

Во первых, зачем он тебе напрямую? А, во-вторых, почему нельзя? Сделай его паблик класс, и добирайся как хочешь, если тебе так это горит (непонятно только, опять-таки, зачем - ты же не паришься, когда инжектишь по DI интерфейсы вместо реализаций). А можешь даже все его приватные поля сразу объявить как паблик, чтобы добираться можно было
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026957
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Хуже нет, когда прикладники начинают лезть в core со своим ограниченным опытом.

Хорошо, если такой системщик всех системщиков не разрешает, то лезть не будем, уговорил
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026958
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Теперь из прикладного кода добраться до хендлера невозможно обычным способом.

Во первых, зачем он тебе напрямую? А, во-вторых, почему нельзя? Сделай его паблик класс, и добирайся как хочешь, если тебе так это горит (непонятно только, опять-таки, зачем - ты же не паришься, когда инжектишь по DI интерфейсы вместо реализаций). А можешь даже все его приватные поля сразу объявить как паблик, чтобы добираться можно было


Что значит зачем? Мне нужно попасть в реализацию. Как мне это сделать быстро?
Нужно найти все usages команды и найти среди них реализацию хендлера.

А если хендлера больше, чем один? И по какой-то упоротой логике подключается либо один, либо второй, либо третий. Какой в итоге тот самый?

На маленьких проектах это не так болезненно. А когда всё абсолютно сделано через медиатор, начинается ад.
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 4 из 5
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IDisposable и структуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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