Обновить
7
0
Евгений@ekulakov

Пользователь

Отправить сообщение
Картинки красивые…
Да, могут быть. ORM, по типу MS Entity Framework, легко сгенерит Вам запрос с 300+ джойнами.
На счёт кешей и одиночных операций — тоже крайне спорный момент.
Выключать мозг, в любом случае, нельзя.
Если нет возможности использовать Constructor Injection, Вам придёться использовать контейнер как Service Locator внутри этой VM, а это уже попахивает.
Недавно была рецензия на книгу «Dependency Injection in .NET». Вам стоит её почитать.
В Вашем случае можно засетать IPasswordSupplier в VM в методе OnStartup.
Заморочно писать все эти продолжения, ловить ошибки и синхронизировать результаты вычислений.
Есть отличный набор экстеншенов, который используется в ASP.NET Web Stack. С их помощью можно писать вот так:

Немного кода
Task<int>.Factory.StartNew(() =>
{
    // Долгая задача
    Thread.Sleep(TimeSpan.FromSeconds(5));
    return int.MaxValue;
})
.Then(number =>
{
    // Обработка результата
    Console.WriteLine("Result: {0}", number);
})
.Catch(info =>
{
    // Ловим ошибки
    Console.WriteLine("Error: {0}", info.Exception);
    return info.Handled();
})
.Finally(() =>
{
    // Завершаем
    Console.WriteLine("Done.");
});


Очень помогает. Статья по теме. Код тут и тут.
Please contact sync@bittorrent.com
А мне кажется уместным. Кто-то скажет «простое яйцо», а кто-то заплатил за него 4млн. долларов…
Минусовать карму за коммент — глупо
Почему-то за такое простое решение как Яйцо ЗАО «Система Телеком» заплатила 4 млн долларов…
А Вам «Сходство до степени смешения» что-нибудь говорит?
Я думаю посыл такой: люди вообще не парятся брать чужое и выдавать за своё.
BroadcastBlock<TInput> в конструктор принимает клонирующую функцию Func<T, T>.
Можно впихнуть всё, что Вам будет угодно.
Можно клонировать IEnumerable<MyType>, если Вам нужно именно это. Как при этом память себя чувствует?
Библиотека позволяет убрать все эти синхронизации, которые ужасают своим видом не подготовленного читателя =)
Писал про TPL Dataflow небольшой пост Использование TPL Dataflow для многопоточной компрессии файлов.
Для клонирования есть BroadcastBlock<T>.
Выглядеть это будет как-то так:
Читаем -> BufferBlock<TInput> -> BroadcastBlock<TInput> -> TransformBlock<TInput,TOutput> -> ActionBlock<TOutput>.
Блоков вида -> TransformBlock<TInput,TOutput> -> ActionBlock<TOutput> у Вас будет 100+.
Последний ActionBlock<TOutput> нужен для сохранения результатов (не понял куда Вы их пишете).
На сколько я понял, фича реализована для распространенных фреймворков, для своего кода нужно юзать аннотации (NotifyPropertyChangedInvocatorAttribute)
Некоторые и на 4 не перешли
промахнулся, коммент ниже
Авторы говорят что быстрый (сам не тестировал):
Handwritten Mapper: 475 milliseconds
Emit Mapper: 469 milliseconds
Auto Mapper: 205256 milliseconds

В сети много сравнений производительности.
На деле, скорее всего, чуть медленнее, чем руками. Но, явно, удобнее.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность