Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Мне нравится что не приходится заботиться об асинхронности
все делается разметкой
нравится то что не приходится писать события и делегаты, проверять есть ли на них подписчики.
разбираться в нем проще чем в коде скрытом за паттернами
только придется учесть что не смогу ловить окончание обработки сигналов.
Способ понижать связность много, описан один из них, пока в качестве эксперимента.
А в этом подходе нет помех для отслеживания пути выполнения, как в отладчике так и в логике.
я еще не пробовал такой подход в большом проекте
Если я беру код проекта и хочу понять что будет при таком-то сигнале, поиском нахожу все обработчики сигнала и вижу.
ее [очередности] не должно быть при обработке одного сигнала всеми подписчиками
Type type = eventHandler.GetType();
foreach (var interfaceType in type.GetInterfaces()) {
if (String.Equals(interfaceType.Name, interfaceName, StringComparison.OrdinalIgnoreCase)) {
return TryInvokeMethod(eventHandler, interfaceType, methodName, arguments, out returnValue);
}
}
_interfaceMethodsCache. Да, и еще есть такая вещь, которая с развитием процессоров становится все более актуальной, это асинхронность, microsoft делает много хорошего в этом направлении, тот же PLINQ, всякий сахар вроде await, но все это делается все равно в привычных рамках ООП, и нам все еще приходится самим создавать потоки, пускай и в виде тасков, но самим. Нужно отслеживать окончание исполнения задач, чтобы определить когда рессурсы станут ненужными.
[rtSignalAsyncHanlder(BufferSignal.FileInBuffer)]
void ProcessFileInBuffer(rtSignal signal)
void AsyncSignalProcessFileInBuffer(rtSignal signal)
построить взаимодействие исключительно через интерфейсы и фабрики (что увеличит размер кода раза в два, и существенно усложнит читабельность)
public class UserSelected
{
private readonly int userId;
public UserSelected(int userId)
{
this.userId = userId;
}
public int UserId
{
get
{
return this.userId;
}
}
}
В языке программирования C# есть похожая конструкция с другой терминологией и синтаксисом: события играют роль сигналов, а делегаты — роль слотов.
Смена парадигмы программирования на C#, переход на сигналы и очереди (слоты)