|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Вопрос такой - до какой степени принято (если тут это уместно), делать приложение "слабосвязанным"? Где та грань, показатель "достаточно"? Ведь в стремлении к декомпозиции можно дойти до "один метод - один класс". А потом уже собирать всё каким-нибудь NINJECT-ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2013, 19:33 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueГде та грань, показатель "достаточно"? здравый смысл ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2013, 22:43 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
ИзопропилMonochromatiqueГде та грань, показатель "достаточно"? здравый смысл+ много ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2013, 22:48 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Общение между слоями и достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2013, 10:08 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
МСУ, Слоев может быть много. И разных. Далеко не обязательно ограничиваться DAL,BL и UI. Тот же BL может быть разбит на 15 слоев, которые тоже можно абстрагировать друг от друга. Никто так не делает? o_O Тесты, взаимозаменяемость сборка на лету и прочее.... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2013, 12:57 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
И вопрос вдогонку. Как бы попроще... Вот допустим, делаю я мобильное приложение на каком-нибудь движке типа Ксамарин. И допустим пишу функцию, которая обращается к нативной библиотеке платформы (iOS,Ведро,Винда). Допустим, получает список каких-то ресурсов. Пока всё ровно, пишу три класса, которые реализуют требуемый интерфейс, но типа по разному - платформа то нативная. Но вот в чем закавыка - допустим на винде получение списка ресурсов асинхронное , а на всех остальных - синхронное. Получается, интерфейс для всех реализаций должен подразумевать асинхронную природу? Или как-то это можно обойти (не понимаю как). Но какая же тут слабая связанность, когда реализация нижнего уровня впрямую влияет на реализацию более верхнего? P.S. Ксамарин приведен для примера. Как-то коробит, что если ты на каком-то низком уровне встречаешь асинхронный метод, то надо переделывать всех, кто пользуется его результатами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2013, 13:08 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Monochromatique, Ваш пример более чем надуманный, должны же перед проектированием приниматься меры для стандартизации кода в разрезе на каких ос будет использоваться код. Возвращает асинхронный метод, может лучше результат работы асинхронного метода. зы Страсти по DI (IoC) - да это тривиальное представление способа исполнения, что его так возвеличивают, на прицепляли всяких рюшечек: слежение за жизнью, пулов - короновали в фреймворк.... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2013, 14:53 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueВопрос такой - до какой степени принято (если тут это уместно), делать приложение "слабосвязанным"? Где та грань, показатель "достаточно"? Ведь в стремлении к декомпозиции можно дойти до "один метод - один класс". А потом уже собирать всё каким-нибудь NINJECT-ом. эта определённая грань существует. это границы вашего контроля над кодом. сама природа DI подразумевает инверсию абстракции. в отличие от классического подхода, где нижние слои ничего не знают о верхнем слое, здесь верхние слои ничего не знает о нижних слоях. в этом и проявляется слабая связность компонентов. поясню. нижний слой реализует некий интерфейс, который использует верхний слой. в таком случае, необходимо знать, что это за интерфейс. возможно это будет дополнительная сборка — хранилище интерфейсов. в итоге, слабая связность выливается в дополнительный кодинг. ещё одним минусом является, что при очень слабой связности может быть достаточно трудно разобраться, что же от чего в итоге зависит, и как это всё работает. резюмирую ответ на вопрос. до такой степени, чтобы это было уместно :) как уже сказали выше, по логическим слоям приложения. в принятии решения должно участвовать здравое разумение о тестировании и взаимозаменяемости компонентов. там, где это не нужно, DI не нужен. 1. тестируемость. если функциональность компонента детерминирована (отсутствуют какие-либо побочные эффекты, оказываемые на работу приложения) — DI не нужен. 2. взаимозаменяемость. если имеются предположения о возможной замене реализации конкретного слоя, или подмене реализации при изменении условий — DI нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2013, 23:27 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueМСУ, Слоев может быть много. И разных. Далеко не обязательно ограничиваться DAL,BL и UI. Тот же BL может быть разбит на 15 слоев, которые тоже можно абстрагировать друг от друга. 1. Если ты не ограничиваешься "стандартными" слоями, это не значит, что им не нужна слабосвязность. 2. BL ты не можешь разбить на 15 слоев, ибо это будет простая декомпозиция. А речь именно о слоях. 3. Тебя интересует теория? К чему эта дискуссия о бесконечной инверсии? Ты и только ты решаешь, что и как расслаивать, что и как декомпозировать, что и как инжектировать. Серебряная пуля лишь у стреляющего. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 17:47 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
МСУ, можно определение "слоя"? 3. Мне неизвестны входные данные для принятия решения. Иными словами - best practices. Если они есть. Вот товарищи говорят - насколько дури хватит (чтобы самому не запутаться в коде). Может быть что то еще? И про асинхронность никто не ответил. Пока очевидный выход такой - изначально подразумевать асинхронность, даже если её нет и вероятно не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 22:13 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Monochromatique, про слои легко гуглится, литературы достаточно. бест практики бест практикам рознь. без конкретной задачи и конкретных условий, ваш вопрос вообще лишён какого-либо смысла. вот пример. как лучше всего строить дома? сколько этажей? сколько комнат? лифтов? люди говорят, насколько дури хватит, может что-то ещё?? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 23:23 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueИ про асинхронность никто не ответил. я так и не понял при чём тут асинхронность и DI. если будете использовать механизм конечных автоматов (async/await) введённых в .NET 4.5, задача упрощается. посмотрите, например, на реализацию Entity Framework 6, большая часть функций имеет асинхронные аналоги (в том числе и для PLINQ). если вы делаете универсальную библиотеку для широкого пользования, то уместно будет поступить также. а для своего приложения, делайте асинк там, где он требуется или может потребоваться. и не делайте, если не нужен и не потребуется. в чём проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 23:36 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
"вот пример. как лучше всего строить дома? сколько этажей? сколько комнат? лифтов?" И в чем проблема-то? "как лучше всего строить дома?" Зависит от региона. "сколько этажей?" Ограниченно бюджетом, регламентами конкретного региона и возможностями конкретного места. "сколько комнат?" Наибольшую ликвидность имеют однухи. Опять же - зависит от региона. "лифтов?" Принято 4 лифта на парадную на 100 квартир. Интерполировать сможет и третьеклассник. Смотри, я ответил на все ваши вопросы, но вы не в состоянии ответить на мои. Может просто вам кажется , что вы в теме? Бывает и такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 23:44 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
hVostt, Я просил ОПРЕДЕЛЕНИЕ слоя, а не картинку. Вы понимаете разницу между: "На какие слои принято делить приложение" и "Приведите определение слоя" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 23:46 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
hVosttMonochromatiqueИ про асинхронность никто не ответил. я так и не понял при чём тут асинхронность и DI. На самом деле связать и их можно, но в контексте данного топика - я не знаю, зачем вы пытаетесь их связать вместе. Ок, если вам это сложно вообразить, как могут асинхронные методы резолвиться via DI - забудьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2013, 23:52 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Я поясню еще раз, для тех, кто не знает, сколько в квартире должно быть санузлов. Пишется приложение. Один язык, разные платформы. Допустим в ходе приложения нужно получить список сетевых интерфейсов. Один программист создает следующий интерфейс: IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces(); И программист его реализует и всё работает. Реализует через функцию SDK IEnumerable<NetworkInterfaceInfo> core_getAvailableNetworkInterfaces(); Выходит новое SDK/для новой платформы. Единственное различие со старым - это тот факт, что функция core_getAvailableNetworkInterfaces(); стала асинхронной . То есть, теперь у пользователей на руках две платформы. Вопросы: 1. Можно ли переписать только реализацию IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces(); оставив нетронутой остальную часть приложения? Как это сделать? Варианты ответов: 1. Можно, надо сделать так-то.. (Например замыкания?) 2. Нет, надо переписывать и сам интерфейс, добавлять события и прочее.. 3. Надо изначально добавлять асинхронность там, где это возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 00:09 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueЯ поясню еще раз, для тех, кто не знает, сколько в квартире должно быть санузлов.Никто не знает, сколько в моей квартире должно быть санузлов, даже Вы :) MonochromatiqueВарианты ответов: 1. Можно, надо сделать так-то.. (Например замыкания?) 2. Нет, надо переписывать и сам интерфейс, добавлять события и прочее.. 3. Надо изначально добавлять асинхронность там, где это возможно.Любой вариант может оказаться правильным в моем проекте. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 00:30 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
LRMonochromatiqueЯ поясню еще раз, для тех, кто не знает, сколько в квартире должно быть санузлов.Никто не знает, сколько в моей квартире должно быть санузлов, даже Вы :) MonochromatiqueВарианты ответов: 1. Можно, надо сделать так-то.. (Например замыкания?) 2. Нет, надо переписывать и сам интерфейс, добавлять события и прочее.. 3. Надо изначально добавлять асинхронность там, где это возможно.Любой вариант может оказаться правильным в моем проекте. В вашей квартире должно быть 0<x<=2. Ответ? Количество клозетов в вашей квартире не попадает в это условие? Про асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 00:47 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueВ вашей квартире должно быть 0<x<=2. Ответ? Количество клозетов в вашей квартире не попадает в это условие?Ответ банально прост: жена (еще) не определилась, сколько должно быть :) Т.е. в моем случае вопрос этот более политический, чем технический. MonochromatiqueПро асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?Ну давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 01:27 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
Вдогонку, самый простенький пример, чтобы сразу стало понятно - Observing an Asynchronous Operation ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 01:34 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueПро асинхронность сведу к простому - возможно ли работу асинхронного метода завернуть в синхронную обертку? Если возможно, то как?Никак. Надо сразу делать асинхронным. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 06:04 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
hVostt1. тестируемость. если функциональность компонента детерминирована (отсутствуют какие-либо побочные эффекты, оказываемые на работу приложения) — DI не нужен. 2. взаимозаменяемость. если имеются предположения о возможной замене реализации конкретного слоя, или подмене реализации при изменении условий — DI нужен.3. Раздельная компиляция (плагиностроение) - нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 06:07 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
LRНу давно уже существует "почти стандартное" средство Rx (Reactive Extensions) ( msdn ), на форуме часто упоминалось.Зачем нужно "почти", если есть стандартное TPL. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 06:09 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueМСУ, можно определение "слоя"? Рассуждаешь о слоях и не понимаешь определения? Отлично! Гугли. Monochromatique3. Мне неизвестны входные данные для принятия решения. Иными словами - best practices. Если они есть. Вот товарищи говорят - насколько дури хватит (чтобы самому не запутаться в коде). Может быть что то еще? Про инверсию хорошо написано в application architecture гайде. Кури. Будет твоим best practices. MonochromatiqueИ про асинхронность никто не ответил. Пока очевидный выход такой - изначально подразумевать асинхронность, даже если её нет и вероятно не будет. А она тут каким боком? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 10:04 |
|
Страсти по DI (IoC).
|
|||
---|---|---|---|
#18+
MonochromatiqueОдин программист создает следующий интерфейс: IEnumerable<NetworkInterfaceInfo> iGetAvailableNetworkInterfaces(); И программист его реализует и всё работает. Реализует через функцию SDK IEnumerable<NetworkInterfaceInfo> core_getAvailableNetworkInterfaces(); Выходит новое SDK/для новой платформы. Единственное различие со старым - это тот факт, что функция core_getAvailableNetworkInterfaces(); стала асинхронной . В корне не верный подход, более того даже губительный. Новый асинхронный метод должен быть GetAvailableNetworkInterfacesAsync. Думаю не нужно пояснять причину подобного домостроя. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 10:06 |
|
|
start [/forum/topic.php?fid=20&msg=38442961&tid=1403785]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 321ms |
total: | 493ms |
0 / 0 |