IoC скрива несъответствията на платформата

Да приемем, че имате трислойно приложение:

  1. UI слой (UI)
  2. Бизнес слой (BLL)
  3. Слой данни (DAL): препраща към 32-битова DLL, така че трябва да се компилира като x86

В традиционно приложение потребителският интерфейс ще препраща към BLL, а BLL ще препраща към DAL. Ако потребителският интерфейс или BLL бяха зададени на платформата „Всеки процесор“, ще получите предупреждение за несъответствие на платформата в C# компилатора. По този начин изискването x86 (или „предложението“, тъй като е предупреждение) ще се появи в потребителския интерфейс и след това компилаторът ще бъде доволен.

В приложение, което използва IoC, приемете, че сега добавяте 4-ти сбор, „Споделени интерфейси“, който се посочва от всички слоеве. Освен това потребителският интерфейс препраща към BLL и DAL, а BLL не препраща към DAL. В този случай потребителският интерфейс ще види предупреждението за несъответствие на платформата. BLL обаче може да остане като „Всеки процесор“ и да не получава никакви предупреждения. Можете да си представите останалото и как това може да причини грешки по време на изпълнение.

Моето разсъждение правилно ли е? Дали IoC, или по-общо казано, хлабавото свързване, по своето естество има тенденция да премества някои грешки от времето на компилиране към времето на изпълнение?

Редактиране: Така че, като преосмислих това, осъзнах, че логиката ми е погрешна. Основният модул (UI) е този, който определя под каква платформа работи приложението. Така че дори ако BLL остане като „Всеки процесор“, потребителският интерфейс ще принуди x86 и няма да причини грешки по време на изпълнение. Още по-добре, ако BLL е споделен и друга реализация на DAL не изисква x86, другото приложение може да остане като Any CPU, тъй като не плъзгате тази препратка. Някакви други примери, при които някои грешки на компилатора се преместват в грешки по време на изпълнение?


person Nelson Rothermel    schedule 11.03.2013    source източник


Отговори (1)


Вашите разсъждения нямат нищо общо с IoC или хлабаво свързване. Тези грешки се появяват веднага щом започнете да смесвате 32bit/64bit, сега няма значение как използвате DLL файловете. Грешките са на ниво асемблиране, а не на ниво клас като хлабаво свързване или инжектиране на зависимости.

person jgauffin    schedule 12.03.2013