powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Страсти по DI (IoC).
25 сообщений из 66, страница 2 из 3
Страсти по DI (IoC).
    #38443062
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLRНу давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось.Зачем нужно "почти", если есть стандартное TPL.
+1
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443072
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КMonochromatiqueПро асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?Никак. Надо сразу делать асинхронным.Наверное ты прочитал невнимательно. Метод изначально асинхронный, нужно сделать синхронным.

Можно, запустив после вызова цикл, в котором проверяется состояние объекта. Но это ведет к падению производительности.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443077
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУMonochromatiqueОдин программист создает следующий интерфейс:

IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces();

И программист его реализует и всё работает. Реализует через функцию SDK

IEnumerable<NetworkInterfaceInfo> core_getAvailableNetworkInterfaces();

Выходит новое SDK/для новой платформы. Единственное различие со старым - это тот факт, что функция

core_getAvailableNetworkInterfaces(); стала асинхронной .

В корне не верный подход, более того даже губительный. Новый асинхронный метод должен быть GetAvailableNetworkInterfacesAsync. Думаю не нужно пояснять причину подобного домостроя.

МСУ, ты вообще о чем?? " Новый асинхронный метод должен " - кому он должен?? Это метод SDK, ну прибавь к нему Async - что изменится?

О чем вопрос - понятно?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443079
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueМСУ, ты вообще о чем??
О том, что добавление нового функционала в API должно быть строго формализовано и реализовано. В частности это достигается введением перегруженных методов или новых.

Monochromatique" Новый асинхронный метод должен " - кому он должен??
Тому, кто его использует, вестимо.

MonochromatiqueЭто метод SDK, ну прибавь к нему Async - что изменится?
Как минимум MSIL. А что?

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

Можно, запустив после вызова цикл, в котором проверяется состояние объекта. Но это ведет к падению производительности.

Нет. Вопрос о том, как защититься от того, что где-то в недрах ядра какая-то функция стала асинхронной. Если с самого начала этого не предполагалось. Как переделывать по минимуму?
Какая архитектура/подход в этом может помочь? При проектировании интерфейсов высокого уровня - надо ли "заморачиваться" на реализацию низкоуровневых функций? Как гарантировано не заморачиваться?

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

В таком вот ключе.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443083
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueAntonariyпропущено...
Наверное ты прочитал невнимательно. Метод изначально асинхронный, нужно сделать синхронным.

Можно, запустив после вызова цикл, в котором проверяется состояние объекта. Но это ведет к падению производительности.

Нет. Вопрос о том, как защититься от того, что где-то в недрах ядра какая-то функция стала асинхронной. Если с самого начала этого не предполагалось. Как переделывать по минимуму?
Какая архитектура/подход в этом может помочь? При проектировании интерфейсов высокого уровня - надо ли "заморачиваться" на реализацию низкоуровневых функций? Как гарантировано не заморачиваться?

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

В таком вот ключе.Чушь какая-то. Я понимаю, был метод синхронный, добавился асинхронный аналог, но чтобы исчез старый? Из "ядра"? Разработчика ядра в этом случае следует выгнать взашей.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443086
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, давай еще раз (надеюсь последний).

Есть приложение - состоит из модулей, которые:
1. Разрабатывались разными людьми.
2. Соединяются MEF-ом.

Всё работает. Меняется функция SDK, становится асинхронной. Я описал пример про получение NW-интерфейсов.

Хочется!

Переписать только сборку, которая содержит только класс с методом получения списка NW интерфейсов.

Заменить её и всё. Всё должно продолжить работать также как и раньше.

Это реально? Вопрос про асинхронность ТОЛЬКО В ЭТОМ . Не про названия методов, не про формализцию.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443091
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyMonochromatiqueпропущено...


Нет. Вопрос о том, как защититься от того, что где-то в недрах ядра какая-то функция стала асинхронной. Если с самого начала этого не предполагалось. Как переделывать по минимуму?
Какая архитектура/подход в этом может помочь? При проектировании интерфейсов высокого уровня - надо ли "заморачиваться" на реализацию низкоуровневых функций? Как гарантировано не заморачиваться?

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

В таком вот ключе.Чушь какая-то. Я понимаю, был метод синхронный, добавился асинхронный аналог, но чтобы исчез старый? Из "ядра"? Разработчика ядра в этом случае следует выгнать взашей.

Ну ребят, на вас не угодишь. Более абстрактных примеров вы не понимаете. Конкретные вам не нравятся.

Вы, парни, писали что-нибудь кроме SPA? Детские рассуждения какие-то.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443099
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueМСУ, давай еще раз (надеюсь последний).
Ну давай.

MonochromatiqueЕсть приложение - состоит из модулей, которые:
1. Разрабатывались разными людьми.
2. Соединяются MEF-ом.
Ок.

MonochromatiqueВсё работает. Меняется функция SDK, становится асинхронной. Я описал пример про получение NW-интерфейсов.
Стоп, дальше даже читать не буду. Мне нужно тебе 10 раз повторить, что нельзя так делать?

Monochromatique Хочется!
Аргумент не катит.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443105
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МCУСтоп, дальше даже читать не буду. Мне нужно тебе 10 раз повторить, что нельзя так делать?

Неужели так сложно вообразить, что может быть ситуация, в которой на положение вещей повлиять нельзя?

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

MonochromatiqueСмена версии SDK, смена платформы вообще - да мало ли причин??
Если тебе интересует не бест практики, а говнопрактики , ну хорошо - заменили в лоб метод на асинковый. Что дальше?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня у одного складывается впечатление, что многоуважаемый Monochromatique ебёт нам моск?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443151
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyАлексей Кпропущено...
Никак. Надо сразу делать асинхронным.Наверное ты прочитал невнимательно. Метод изначально асинхронный, нужно сделать синхронным.

Можно, запустив после вызова цикл, в котором проверяется состояние объекта. Но это ведет к падению производительности.Ну наверное не цикл, а ожидание WaitHandle, но это сведёт на нет все усилия.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443154
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueВопрос о том, как защититься от того, что где-то в недрах ядра какая-то функция стала асинхронной.Сказали же - никак. Добавляй новый метод по факту, как предложил МСУ, или сразу планируй интерфейс в расчёте на асинхронность.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443185
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУУ меня у одного складывается впечатление, что многоуважаемый Monochromatique ебёт нам моск?
не только нам, но и себе что характерно
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443199
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилне только нам, но и себе что характерно
Ну так на кол его тогда?

Иначе как вдолбить в моск человека, что абстракция сама должна "намекать", что метод должен быть асинхронный

Код: c#
1.
2.
3.
4.
public interface IService
{
    Task<T> GetDataAsync();
}



И добавление нового функционала не должно затирать предыдущую реализацию.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443238
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueИ допустим пишу функцию, которая обращается к нативной библиотеке платформы (iOS,Ведро,Винда).

Допустим, получает список каких-то ресурсов.

Пока всё ровно, пишу три класса, которые реализуют требуемый интерфейс, но типа по разному - платформа то нативная.Чтоб предметно:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
interface IResourceProvider
{
    IEnumerable<Resource> GetResources();
}

class WindowsResourceProvider : IResourceProvider
{
    public IEnumerable<Resource> GetResources()
    {
        return NativeMethods.GetResources();            
    }    
}

class AndroidResourceProvider : IResourceProvider
{
    public IEnumerable<Resource> GetResources()
    {
        return FactoryProviderFactory.getInstance().getFactory().getProvider().execute(new GetResourcesCommandImpl());
    }    
}

class IOSResourceProvider : IResourceProvider
{
    public IEnumerable<Resource> GetResources()
    {
        return NSResourceManager.getResourcesWithKeyAndValueByLoadingResourceFromXibFileAndReturningErrorOnFailure();
    }    
}



MonochromatiqueНо вот в чем закавыка - допустим на винде получение списка ресурсов асинхронное , а на всех остальных - синхронное. Получается, интерфейс для всех реализаций должен подразумевать асинхронную природу? Или как-то это можно обойти (не понимаю как).Один из вариантов -- ориентироваться на "общий знаменатель" -- т.е. на тот функционал, который поддерживается всеми платформами. В твоем конкретном случае можно расчитывать на то, что все платформы умеют получать список ресурсов синхронно, так что Windows-реализацию нужно будет принудительно делать таковой.

Другой вариант -- вот так (псевдокод):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
interface IAsyncResourceProvider : IResourceProvider
{
    async IEnumerable<Resource> GetResourcesAsync();    
}

class WindowsResourceProvider : IAsyncResourceProvider
{
    public IEnumerable<Resource> GetResources()
    {
        return NativeMethods.GetResources();            
    }

    public async IEnumerable<Resource> GetResourcesAsync()
    {
        return NativeMethods.GetResourcesAsync();            
    }
}



И потом (тоже псевдокод):
Код: c#
1.
2.
3.
4.
var resourceProvider = ServiceLocator.Resolve<IResourceProvider>();
var resources = resourceProvider is IAsyncResourceProvider ?
    await ((IAsyncResourceProvider)resourceProvider).GetResourcesAsync() :
    resourceProvider.GetResources();



MonochromatiqueНо какая же тут слабая связанность, когда реализация нижнего уровня впрямую влияет на реализацию более верхнего?Любая абстракция рано или поздно протекает
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443263
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИзопропилне только нам, но и себе что характерно
Ну так на кол его тогда?

Иначе как вдолбить в моск человека, что абстракция сама должна "намекать", что метод должен быть асинхронный

Код: c#
1.
2.
3.
4.
public interface IService
{
    Task<T> GetDataAsync();
}



И добавление нового функционала не должно затирать предыдущую реализацию.

Воу-воу, МСУ, палехче.

Эти вопросы рождены необходимостью правильно разделять работу между программистами. Отойти от подхода "дали-мяч-*уячь".
Сейчас приложения строятся несколько стихийно и не могут выйти за рамки "код-контролировать-может-один/два-человека".
Вернуться к приложению годичной давности вообще несколько сложновато. Несколько.

Поэтому хочется строить их в соответствии с лучшими практиками, чтобы набить поменьше шишек.
Принцип DI, а также и событийно-ориентированная архитектура кажутся наиболее близкими по сути и подходящими подходами.

Я пытаюсь сейчас нащупать границы, чтобы не свалиться в абсурд или попасть в ситуацию, когда то, что должно помогать - станет проблемой.

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

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

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

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

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


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