Jakie są najlepsze praktyki dla architektury aplikacji na poziomie korporacyjnym wykorzystującej MVC5?
Zastanawiałem się, jaka jest najlepsza praktyka dla architektury na poziomie korporacyjnym opartej na MVC5. Mam na myśli wybór między wieloma warstwami lub wieloma projektami w jednym rozwiązaniu? a może więcej niż jedno rozwiązanie? jakiś dobry przykładowy projekt?
2 answers
Ponieważ moje pytanie było często odwiedzane w ciągu ostatniego roku i nie ma solidnej odpowiedzi, ponieważ jestem tego świadomy, postanowiłem udzielić wyczerpującej odpowiedzi w jak największym stopniu. Odpowiedź ta opiera się na kilku rzeczywistych doświadczeniach projektowych i przy kilku konsultacjach ekspertów: [51]}
- przede wszystkim należy zauważyć, że w projektowaniu oprogramowania
proces, nie ma to jak solidne dobro i zło. Tak długo jak
podejście działa na twój projekt i dobrze pasuje, jest
right
i jeśli Informatyka nie, to jestwrong
. W oprogramowaniu nie ma sztywnych zasad design. SąProject needs and specifications
. Ale ogólnie, został on zaakceptowany za pomocąDesign Patterns and Principles
sprawia, że projekt więcejrobust
,reliable
andeasy to maintain
and make Twój kodloosely coupled and highly cohesive
. - cała historia
Software Design and Architecture
jest o tym, jak możesz łatwo zarządzać swoim projektem i jak możesz utrzymać swój przyszłe zmiany. Zastanów się, które podejście daje najlepszą odpowiedź na oni. To będzie dla ciebie najlepsze. Nie myśl za dużo oProfessionalism
! .Twój projekt rośnie z czasem i staje się bardziej dojrzały. Więc pomyśl o swoim projekcie! - jako pierwszy krok i dla architektury aplikacji na poziomie przedsiębiorstwa,
zawsze staraj się podążać za
Separation of Concerns
lubSoC
. To znaczy, że ty powinny mieć różne poziomy dla różnych warstw projektu. Informatyka jest wysoce zalecane użycie innego projektu w Twoim rozwiązanie dlaData Access Layer
,Domain Entities
,Business Layer
iPresentation Layer
. W projekcie MVC5 lepiej jest użyćClass Library Project
dlaData Access Layer
,Domain Entities
,Business Layer
i projekt MVC dlaPresentation Layer
. -
Data Access Layer
jest projektem, który stawia czoła interakcjom z bazami danych i bazami danych. Możesz mieć wszystkie swojeEntity Framework
lub podobne podmioty w tym projekcie. Oddzielenie warstwy dla warstwy bazy danych oznacza w przypadku zmiany hurtowni danych projektu, jedyną rzeczą, którą musisz zmienić, jest zmiana tego projektu i kilka drobnych zmian naBusiness Layer
. Wszystkie inne projekty w Twoim rozwiązaniu pozostają nienaruszone. Możesz więc łatwo przejść z MS Sql do Oracle lub zEntity Framework
doNHibernate
. -
Domain Entities
jest projektem, którego używam aby zdefiniować wszystkie moje rozwiązanie interfejsy poziomów, klasy, wyliczenia i zmienne. Ten projekt utrzymuje uczciwość w całym moim rozwiązaniu na moich zajęciach i moich metodach. My wszystkie klasy w całym rozwiązaniu są dziedziczone z interfejsów w tym projekt. Więc mam jedno miejsce , aby zmienić moje klasy lub globalne zmienne i oznaczaEasy to Maintain
na przyszłość w moim rozwiązaniu i łatwe do zrozumienia dla nowo dołączonych programistów do projektu. -
Business Layer
to miejsce, w którym kładę całą swoją logikę biznesową w tymBusiness Entities
iBusiness Services
. Cała idea o ta warstwa ma jedno miejsce, aby zachować wszystkie metody biznesowe i interakcje. Wszystkie obliczenia, modyfikacje obiektów i cała logika o danych w tym Zapisywanie, pobieranie, zmiana i tak dalej powinny dzieje się w tej sekcji. Mając tę warstwę w swoim projekcie, można może mieć różnych konsumentów w tym samym czasie, na przykład jeden natywneMVC
i jednaWeb API
warstwa. Lub możesz podać inny wyżywienie w oparciu o różne usługi biznesowe konsumenci specyfikacje. Zaleca się, aby nie umieszczać żadnych logika biznesowa do sekcji kontrolera warstwy MVC. Mając jakiekolwiek logika biznesowa wewnątrz kontrolerów oznacza korzystanie z prezentacji warstwa jako warstwa logiki biznesowej i naruszaSeparation of Concerns
. Wtedy nie będzie łatwo zmienić jedną prezentację na inną lub mieć innego rodzaju konsumentów dla swojego rozwiązanie. Lepiej zachować sekcję kontrolera w MVC tak smukłą jak możliwe. Kontrolery powinny mieć tylko logikę i metody bezpośrednio związane zView Models
. Więcej informacji oView Models
zobacz sekcję7
. Jedna rzecz do zapamiętania, lepiej jest mieć różne klasyBusiness Services
w zależności od rozwiązania obiektów lubBusiness Entities
. -
Presentation Layer
W MVC rozwiązanie będzie projekt MVC. Ale rozwiązanie może mieć inny typ lub więcej niż jedną warstwę prezentacji dla różnych konsumentów lub technologii. Na przykład można mieć jedna warstwa MVC i jednaWeb API
w jednym rozwiązaniu. Ogólnie Używać Warstwa prezentacji, aby zachować wszystkie logika prezentacji w it. Logika prezentacji nie powinna mieć nic wspólnego z logiką biznesową albo logika danych. Więc pytanie brzmi, czym jestPresentation logic
?Presentation logic
jest logiką związaną z modelami widoku. Zobacz modele są obiektami dostosowanymi do widoków lub stron. W większości przypadków biznes obiekty nie nadają się do użycia w widokach. Z drugiej strony, widoki prezentacji zwykle wymagają logiki walidacji lub logika prezentacji, np. nazwa wyświetlacza inna niż oryginalna nazwy obiektów. W takich przypadkach lepiej zachować logika prezentacji oddzielona niż logika biznesowa, aby ułatwić zmianę prezentacji logika lub logika biznesowa niezależnie i nawet łatwo przełączać warstwa prezentacji dla różnych projektów interfejsu użytkownika lub zmieniających się firm logika zapewniająca większą funkcjonalność bez obawy o przerwanie z logiką prezentacji. W przypadku wykorzystania projektu MVC jako warstwa prezentacji dla rozwiązania, wszystkie modele widoku powinny być umieszczone wModels
sekcja projektu MVC i cała logika prezentacji powinna być umieszczone wControllers
część projektu. - ostatnią rzeczą do powiedzenia jest to, że dla każdego rozwiązania wielopoziomowego, trzeba
frameworków do mapowania obiektów, na przykład do konwersji
podmiot gospodarczy do wyświetlenia modelu. Istnieje kilka narzędzi do tego
cele takie jak
AutoMapper
,BLToolkit
, iEmitMapper
.
Ostatnie słowo: proszę o komentarz i ocenę question
i moje {[49] } aby było lepiej!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 21:02:53
Spójrz na Contoso University . Doskonały przykład aplikacji na poziomie przedsiębiorstwa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-18 11:41:21