/ / StructureMap n-подредени приложения - asp.net-mvc-3, структура на картата, n-ярусна архитектура

СтруктураМатериали за n-tier - asp.net-mvc-3, структураmap, n-tier-architecture

Опитвам се да внедря StructureMap в моя ASP.Нетно приложение MVC 3. Моята архитектура следва п-ниверен подход, където моят потребителски интерфейс разговаря с моята услуга, която от своя страна говори с моя бизнес ниво, което от своя страна говори с ниво на хранилището. Имам договори за данни, които представляват данните, преминаващи през всички нива.

Моят потребителски интерфейс трябва да знае само за услугитеот първи ред. Моят потребителски интерфейс не трябва да знае или да се грижи за бизнеса, камо ли за нивата на хранилището или данните. Всеки слой е собствената му сглобка и използвам инжектиране на зависимост от конструктора, за да инжектирам необходимите екземпляри (т.е. аз инжектирам бизнес обекта в моя сервизен конструктор и инжектирам обекта на хранилището в бизнес конструктора).

Така че, ако моите нива са в отделни събрания, имонтажът на потребителския интерфейс, в който пребивава структурата на картата, не знае за долните нива, тогава как да конфигурирам структурата на картата? Аз не искам да създавам референции в моя потребителски интерфейс на всички "по-ниски" нива, които седят зад подреждането на услугите. Ако направя това, тогава това потенциално отваря вратата за потребителския интерфейс да говори директно с базата данни, което е лошо.

Моля помогнете.

Благодаря

мъжко животно

Отговори:

2 за отговор № 1

Ти накъдето отиваш, аз от там се връщам. Взехте идея директно като Вас, мислейки, че избягването на препратките към монтажа ще разреши всичко. Дори успях да направя онова, което се опитвате с xcopy след изграждането на „вградени DLL“. В действителност - това просто го направи по-объркващо, отколкото се предполага.

Работата е там - самите препратки не са корен на злото. Това е добре за справка за всичко от най-горния (UI) монтаж. Лош код е това, което създава проблеми.


2 за отговор № 2

Аз не искам да създавам референции в моя потребителски интерфейсза всички „по-ниски“ нива, които седят зад подреждането на услугите. Ако направя това, тогава това потенциално отваря вратата за потребителския интерфейс да говори директно с базата данни, което е лошо.

Трябва да посочите всички нисък подрежда крайното приложение за ASP.NET, където е конфигуриран контейнерът DI. Всички монтажи трябва да са в bin папка, когато разгръщате, в противен случай приложението ви няма да работи.

UI слоят (ASP)Приложение NET) не говори директно с базата данни. Ако правилно сте абстрахирали услугите си, тя говори с абстракцията на услугата, която по отношение на разговора с абстракцията в хранилището, която, в зависимост от това как сте конфигурирали вашите DI разговори с хранилището на данни.


2 за отговор № 3

за структурна карта да свържете зависимостите по целия път по веригата, ще й е необходим достъп до всички сглобки, които реално ще използвате.

Това не означава, че потребителският интерфейс трябва да се позовава на тези все пак (въпреки че това е може би най-лесното решение)

Бихте могли да ви направят референтни сборки от потребителски интерфейс, които съдържат само интерфейсите, от които се нуждае, без да знаете нищо за реализацията на тези интферации (или какви зависимости имат)

Това би означавало, че вашият потребителски интерфейс трябва да знае само за интерфейсите на вашия сервизен ред.

Но за твоя приложение за да можете да използвате всички различни частизаедно трябва да знае коя имплементация на услугата да използва и трябва да знае коя имплементация на всички зависимости, които имплементацията трябва да използва, и така нататък по цялата линия надолу. Всичко това трябва да се направи на едно място (global.ashx в приложение за ASP MVC според мен) и това е единственото място, на което трябва да съществуват препратки към контейнера или към другите класове за изпълнение.

Вие приложение е комбинацията от всичките ви нива заедно. Не е само вашият потребителски интерфейс.

Ако не искате да се позовавате на тези монтажиизобщо тогава вероятно бихте могли да конфигурирате структураmap чрез xml, която вероятно след това ще зарежда динамично монтажите. Не съм сигурен в това, но мисля, че трябва да работи. Конфигурацията на XML е по-тромава.

Стига да се инжектира вашия сервизен интерфейсвъв вашия UI контролери, тогава трябва да сте доста безопасни. За да може някой да използва нова зависимост от един от реферираните dlls като db слоя, той трябва да въведе този интерфейс в контролера и да го свърже с карта на структурата, която трябва да бъде лесно да се забележи.