powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Страсти по DI (IoC).
16 сообщений из 66, страница 3 из 3
Страсти по DI (IoC).
    #38443286
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueЯ поблагодарил за то, что человек по теме высказался. На скуле это типа редкость!Неожиданно... Всё остальное по-твоему офтоп? Читай внимательнее.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443288
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueАлексей Кпропущено...
DI и асинхронности не способствуют читабельности кода. Скорее наоборот...

Тоже понятно. Но. Упор на то, что каждый "читает" свой кусок. Ну а если неофит какой вдруг решит "окинуть" взглядом всё приложение в целом, то... Я себе это вообще с трудом представляю.Тупо разбить всё на классы нынче не модно?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443292
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КАлексей Кпропущено...
Скомпилируй сначала пример Нахлобуча, перед тем как благодарить. Есть сомнения...Предлагает одно, пишет другое...Во-первых, я написал, что это -- псевдокод.

Во-вторых, ты о чем?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443300
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КMonochromatiqueпропущено...


Тоже понятно. Но. Упор на то, что каждый "читает" свой кусок. Ну а если неофит какой вдруг решит "окинуть" взглядом всё приложение в целом, то... Я себе это вообще с трудом представляю.Тупо разбить всё на классы нынче не модно?

Так а смысл топика с самого начала об этом. Насколько разбивать всё по классам. И как следствие применения DI - inject-ировать всё в друг-друга.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443303
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучАлексей Кпропущено...
Предлагает одно, пишет другое...Во-первых, я написал, что это -- псевдокод.
Во-вторых, ты о чем?
НахлобучВ твоем конкретном случае можно расчитывать на то, что все платформы умеют получать список ресурсов синхронно , так что Windows-реализацию нужно будет принудительно делать таковой.
И тут же предлагаешь использовать асинхронное продолжение через await:
Нахлобуч
Код: c#
1.
2.
3.
4.
var resourceProvider = ServiceLocator.Resolve<IResourceProvider>();
var resources = resourceProvider is IAsyncResourceProvider ?
    await ((IAsyncResourceProvider)resourceProvider).GetResourcesAsync() :
    resourceProvider.GetResources();

Надеюсь это опечатка?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443306
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLRНу давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось.Зачем нужно "почти", если есть стандартное TPL.
И то верно, Monochromatique, посмотрите пример Using ContinueWith for the Callback Functionality , может это и будет для Вас решением (допустим, "GetFileStringAsync" изначально "GetFileStringSync")
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443308
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНасколько разбивать всё по классам.Истина как всегда где-то посередине.
MonochromatiqueИ как следствие применения DI - inject-ировать всё в друг-друга.Как только надоест инжектировать вручную. Кстати, для этого необязательно использовать интерфейсы.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443309
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ тут же предлагаешь использовать асинхронное продолжение через await:
Нахлобуч
Код: c#
1.
2.
3.
4.
var resourceProvider = ServiceLocator.Resolve<IResourceProvider>();
var resources = resourceProvider is IAsyncResourceProvider ?
    await ((IAsyncResourceProvider)resourceProvider).GetResourcesAsync() :
    resourceProvider.GetResources();

Надеюсь это опечатка?
Там же сказано: "Другой вариант".

Идея в том, что в клиентском коде динамически опрашиваешь реализации на предмет того, умеют ли они делать что-то нестандартное.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443324
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати. В одной книге видел пример, когда используют MEF и NINJECT вместе. А зачем, разве MEF не покрывает функциональность NINJECT как DI?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443325
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...в смысле - как контейнер.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443327
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучТам же сказано: "Другой вариант".Ок.
НахлобучИдея в том, что в клиентском коде динамически опрашиваешь реализации на предмет того, умеют ли они делать что-то нестандартное.В итоге клиент строится исходя из асинхронной реализации. Проще интерфейс сразу сделать асинхронным. Вроде как логика автоматически заменится полиморфизмом. В клиенте не будет лишних if (resourceProvider is IAsyncResourceProvider) { } .
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443370
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ итоге клиент строится исходя из асинхронной реализации.Не сказал бы. Скорее так: клиент в рантайме выбирает подходящую реализацию, а уж что он там с ней делает -- не дело реализации.

Алексей КПроще интерфейс сразу сделать асинхронным.Я бы не стал; получится "Square peg in a round hole".

Как вариант решения -- в рантайме же оборачивать синхронные реализации в специальную "обертку":
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class AsyncResourceProviderThunk : IAsyncResourceProvider
{
    private readonly IResourceProvider resourceProvider;

    public async IEnumerable<Resource> GetResourcesAsync()
    {
        return MakeAsync(() => resourceProvider.GetResources());
    }
}
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443442
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучАлексей КВ итоге клиент строится исходя из асинхронной реализации.Не сказал бы. Скорее так: клиент в рантайме выбирает подходящую реализацию, а уж что он там с ней делает -- не дело реализации.Если вызываемый метод асинхронный, все вызывающие методы, вероятно, автоматически станут асинхронными. Это не всегда, но часто. Код или синхронный, или асинхронный. Нельзя быть "наполовину беременным".
НахлобучАлексей КПроще интерфейс сразу сделать асинхронным.Я бы не стал; получится "Square peg in a round hole".Это вынужденная мера.
НахлобучКак вариант решения -- в рантайме же оборачивать синхронные реализации в специальную "обертку":
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class AsyncResourceProviderThunk : IAsyncResourceProvider
{
    private readonly IResourceProvider resourceProvider;

    public async IEnumerable<Resource> GetResourcesAsync()
    {
        return MakeAsync(() => resourceProvider.GetResources());
    }
}

Ну да, что-то типа того:
Код: c#
1.
2.
3.
4.
5.
6.
7.
class SyncResourceImpl : IAsyncInterface
{
    public Task<Resource> GetResourceAsync()
    {
        return TaskHelper.FromValue(NativeSyncImpl.GetResource());
    }
}
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443507
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К[/src]Ну да, что-то типа того:
Код: c#
1.
2.
3.
4.
5.
6.
7.
class SyncResourceImpl : IAsyncInterface
{
    public Task<Resource> GetResourceAsync()
    {
        return TaskHelper.FromValue(NativeSyncImpl.GetResource());
    }
}

[/quot]
+1, так и нужно писать.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443510
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу да, что-то типа того:
Код: c#
1.
2.
3.
4.
5.
6.
7.
class SyncResourceImpl : IAsyncInterface
{
    public Task<Resource> GetResourceAsync()
    {
        return TaskHelper.FromValue(NativeSyncImpl.GetResource());
    }
}


+1, так и нужно писать.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443640
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique "вот пример. как лучше всего строить дома? сколько этажей? сколько комнат? лифтов?"

И в чем проблема-то?

"как лучше всего строить дома?"
Зависит от региона.

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

"сколько комнат?"
Наибольшую ликвидность имеют однухи. Опять же - зависит от региона.

"лифтов?"
Принято 4 лифта на парадную на 100 квартир. Интерполировать сможет и третьеклассник.

Смотри, я ответил на все ваши вопросы, но вы не в состоянии ответить на мои.

Может просто вам кажется , что вы в теме? Бывает и такое.

ок. делайте 13 слоёв. и не больше 21-го зависимого класса. точно вам говорю, это бест практикс!
...
Рейтинг: 0 / 0
16 сообщений из 66, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Страсти по DI (IoC).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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