powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Страсти по DI (IoC).
25 сообщений из 66, страница 1 из 3
Страсти по DI (IoC).
    #38441828
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос такой - до какой степени принято (если тут это уместно), делать приложение "слабосвязанным"? Где та грань, показатель "достаточно"?

Ведь в стремлении к декомпозиции можно дойти до "один метод - один класс". А потом уже собирать всё каким-нибудь NINJECT-ом.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38441945
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueГде та грань, показатель "достаточно"?
здравый смысл
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38441950
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилMonochromatiqueГде та грань, показатель "достаточно"?
здравый смысл+ много
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442118
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общение между слоями и достаточно.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442184
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Слоев может быть много. И разных. Далеко не обязательно ограничиваться DAL,BL и UI. Тот же BL может быть разбит на 15 слоев, которые тоже можно абстрагировать друг от друга.

Никто так не делает?

o_O

Тесты, взаимозаменяемость сборка на лету и прочее....
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442190
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вопрос вдогонку.

Как бы попроще... Вот допустим, делаю я мобильное приложение на каком-нибудь движке типа Ксамарин.

И допустим пишу функцию, которая обращается к нативной библиотеке платформы (iOS,Ведро,Винда).

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

Пока всё ровно, пишу три класса, которые реализуют требуемый интерфейс, но типа по разному - платформа то нативная.

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

Но какая же тут слабая связанность, когда реализация нижнего уровня впрямую влияет на реализацию более верхнего?

P.S. Ксамарин приведен для примера. Как-то коробит, что если ты на каком-то низком уровне встречаешь асинхронный метод, то надо переделывать всех, кто пользуется его результатами.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442211
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,
Ваш пример более чем надуманный, должны же перед проектированием приниматься меры для стандартизации кода в разрезе
на каких ос будет использоваться код.
Возвращает асинхронный метод, может лучше результат работы асинхронного метода.
зы Страсти по DI (IoC) - да это тривиальное представление способа исполнения, что его так возвеличивают, на прицепляли
всяких рюшечек: слежение за жизнью, пулов - короновали в фреймворк....
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442388
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueВопрос такой - до какой степени принято (если тут это уместно), делать приложение "слабосвязанным"? Где та грань, показатель "достаточно"?

Ведь в стремлении к декомпозиции можно дойти до "один метод - один класс". А потом уже собирать всё каким-нибудь NINJECT-ом.

эта определённая грань существует. это границы вашего контроля над кодом.

сама природа DI подразумевает инверсию абстракции. в отличие от классического подхода, где нижние слои ничего не знают о верхнем слое, здесь верхние слои ничего не знает о нижних слоях. в этом и проявляется слабая связность компонентов.

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

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

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

1. тестируемость. если функциональность компонента детерминирована (отсутствуют какие-либо побочные эффекты, оказываемые на работу приложения) — DI не нужен.
2. взаимозаменяемость. если имеются предположения о возможной замене реализации конкретного слоя, или подмене реализации при изменении условий — DI нужен.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442631
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueМСУ, Слоев может быть много. И разных. Далеко не обязательно ограничиваться DAL,BL и UI. Тот же BL может быть разбит на 15 слоев, которые тоже можно абстрагировать друг от друга.

1. Если ты не ограничиваешься "стандартными" слоями, это не значит, что им не нужна слабосвязность.
2. BL ты не можешь разбить на 15 слоев, ибо это будет простая декомпозиция. А речь именно о слоях.
3. Тебя интересует теория? К чему эта дискуссия о бесконечной инверсии? Ты и только ты решаешь, что и как расслаивать, что и как декомпозировать, что и как инжектировать. Серебряная пуля лишь у стреляющего.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442762
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, можно определение "слоя"?

3. Мне неизвестны входные данные для принятия решения. Иными словами - best practices. Если они есть. Вот товарищи говорят - насколько дури хватит (чтобы самому не запутаться в коде). Может быть что то еще?

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

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

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

я так и не понял при чём тут асинхронность и DI.

если будете использовать механизм конечных автоматов (async/await) введённых в .NET 4.5, задача упрощается. посмотрите, например, на реализацию Entity Framework 6, большая часть функций имеет асинхронные аналоги (в том числе и для PLINQ). если вы делаете универсальную библиотеку для широкого пользования, то уместно будет поступить также. а для своего приложения, делайте асинк там, где он требуется или может потребоваться. и не делайте, если не нужен и не потребуется. в чём проблема?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442831
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"вот пример. как лучше всего строить дома? сколько этажей? сколько комнат? лифтов?"

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

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

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

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

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

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

Может просто вам кажется , что вы в теме? Бывает и такое.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442835
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Я просил ОПРЕДЕЛЕНИЕ слоя, а не картинку.

Вы понимаете разницу между:
"На какие слои принято делить приложение"
и
"Приведите определение слоя"

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

я так и не понял при чём тут асинхронность и DI.



На самом деле связать и их можно, но в контексте данного топика - я не знаю, зачем вы пытаетесь их связать вместе.

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

Пишется приложение. Один язык, разные платформы.
Допустим в ходе приложения нужно получить список сетевых интерфейсов.

Один программист создает следующий интерфейс:

IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces();

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

IEnumerable<NetworkInterfaceInfo> core_getAvailableNetworkInterfaces();

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

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

То есть, теперь у пользователей на руках две платформы.

Вопросы:
1. Можно ли переписать только реализацию
IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces();
оставив нетронутой остальную часть приложения? Как это сделать?

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

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

MonochromatiqueВарианты ответов:
1. Можно, надо сделать так-то.. (Например замыкания?)
2. Нет, надо переписывать и сам интерфейс, добавлять события и прочее..
3. Надо изначально добавлять асинхронность там, где это возможно.Любой вариант может оказаться правильным в моем проекте.

В вашей квартире должно быть 0<x<=2. Ответ? Количество клозетов в вашей квартире не попадает в это условие?

Про асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442921
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueВ вашей квартире должно быть 0<x<=2. Ответ? Количество клозетов в вашей квартире не попадает в это условие?Ответ банально прост: жена (еще) не определилась, сколько должно быть :) Т.е. в моем случае вопрос этот более политический, чем технический.

MonochromatiqueПро асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?Ну давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442924
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку, самый простенький пример, чтобы сразу стало понятно - Observing an Asynchronous Operation
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442958
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueПро асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?Никак. Надо сразу делать асинхронным.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442960
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt1. тестируемость. если функциональность компонента детерминирована (отсутствуют какие-либо побочные эффекты, оказываемые на работу приложения) — DI не нужен.
2. взаимозаменяемость. если имеются предположения о возможной замене реализации конкретного слоя, или подмене реализации при изменении условий — DI нужен.3. Раздельная компиляция (плагиностроение) - нужен.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38442961
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRНу давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось.Зачем нужно "почти", если есть стандартное TPL.
...
Рейтинг: 0 / 0
Страсти по DI (IoC).
    #38443055
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueМСУ, можно определение "слоя"?
Рассуждаешь о слоях и не понимаешь определения? Отлично! Гугли.

Monochromatique3. Мне неизвестны входные данные для принятия решения. Иными словами - best practices. Если они есть. Вот товарищи говорят - насколько дури хватит (чтобы самому не запутаться в коде). Может быть что то еще?
Про инверсию хорошо написано в application architecture гайде. Кури. Будет твоим best practices.

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

IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces();

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

IEnumerable<NetworkInterfaceInfo> core_getAvailableNetworkInterfaces();

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

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

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


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