Дызайн - Dependency пекла рашэнне?

Мы выкарыстоўваем архітэктуру MVC з мадэллю, якая складаецца з BLL і DAL.

Такім чынам, мы пачынаем «модулі» для нашай сістэмы і канкрэтнага аднаго я рэалізуе выкарыстоўвае шмат тыя ж залежнасці. Адзін клас, у прыватнасці, мае 20 залежнасцяў. У цяперашні час канструктар па змаўчанні стварае рэалізацыю канкрэтнага па змаўчанні, і ў нас таксама ёсць другі канструктар [пра тое, што першы выкарыстоўвае адзін], што дазваляе ўводзіць адзін там ўласныя залежнасці (г.зн. тэставання).

20 аргументаў канструктара здаецца даволі непрыемны пах кода. Іншы раздражняе тое, што часта, калі я пачынаю дадаваць агульныя функцыянальныя магчымасці, мне трэба пайсці дадаць код канструктара і поле ў кожным класе часта паўтараючы адны і тыя ж віды коды зноў і зноў.

Кантэйнер IoC здаецца натуральным рашэннем гэтай праблемы, але праблема ў тым, як далёка я магу ісці? Ці павінен я ўключаць у залежнасці DAL і залежнасцяў BLL? Як наконт «памочнік» або «сэрвіс» залежнасцяў? Падобна на тое, што ў нейкі момант я проста аднаўляць «прасторы імёнаў» структуру з магчымасцю спасылацца на мае класы як статычныя класы ў які момант я пытанне, што я на самой справе набірае.

У мяне паўсталі праблемы мыслення праз гэта. Хто-небудзь ёсць элегантнае рашэнне або савет?

0
Тангенцыйнай звязаныя: вось адказ я напісаў яшчэ пытанне аб скарачэнні колькасці залежнасцяў класа прымае. stackoverflow.com/questions/5601920/…
дададзена аўтар Domenic, крыніца
«У мяне ўзнікаюць праблемы, думаючы, праз гэта». Праверце гэты падручнік: github.com/ninject/ninject/wiki
дададзена аўтар Merlyn Morgan-Graham, крыніца

1 адказы

Калі вы ідзяце маршрут IoC (які я рэкамендую) Я хацеў бы ўключыць усе залежнасці ў кантэйнеры.

Перавага заключаецца ў тым, што вам ніколі не прыйдзецца турбавацца аб стварэнні гэтых залежнасцяў, нават калі ёсць тона іх шмат слаёў глыбока.

напрыклад ClassA займае ў 4 іншых класаў у гэта канструктар, кожны з якіх займае ў двух іншых у іх, і кожны з іх мае па меншай меры спасылкі DAL.

У гэтым выпадку вам проста трэба спасылацца на IoC у вашым пласце вышэйшага ўзроўню ( «склад кораня»), які можа быць ваш карыстацкі інтэрфейс, і сказаць: "дайце мне асобнік аб'екта А», то МАК будзе аўтаматычна ствараць асобнікі іншых 20 асобнікаў для розных залежнасцяў, неабходных для пабудовы графа аб'ектаў.

Твае класах больш не трэба турбавацца аб тым, як ствараць сваю залежнасць, калі ім трэба што-то яны проста прытрымлівацца яго ў канструктару і <моцнага> IoC забяспечаць яго атрымлівае яго.

Я таксама хацеў бы пракаментаваць, што 20 залежнасцяў ў адным класе пэўны код пах, нават калі вы выкарыстоўваеце <моцны> IoC . Гэта, як правіла, паказвае на тое, што клас робіць занадта шмат рэчаў і парушае Single Адказнасць Прынцып .

7
дададзена
+1 - Цалкам згодны, што IoC гэта відавочны шлях ўзяць (прабачце за каламбур MVC), а таксама для выкарыстання тэрміна «автомагіческі».
дададзена аўтар Reddog, крыніца
+1 за любое аб парушэнні SRP. Вызначана добрая ідэя, каб паглядзець на дызайн.
дададзена аўтар Joshua Rodgers, крыніца