Zastanawiam się, jaka jest najlepsza praktyka w architekturze na poziomie przedsiębiorstwa w oparciu o MVC5. Mam na myśli wybór między warstwami lub wieloma projektami w jednym rozwiązaniu? i lub może więcej niż jedno rozwiązanie? jakiś dobry przykładowy projekt?Jaka jest najlepsza praktyka w architekturze aplikacji na poziomie Enterprise przy użyciu MVC5?
15
A
Odpowiedz
24
Ponieważ moje pytanie zostało odwiedził wiele w ciągu ostatniego roku i nie ma stałej odpowiedź jak ja sobie z tego sprawę, postanowiłem zapewnić kompleksową odpowiedź jak najwięcej. Ta odpowiedź jest oparty na jakimś rzeczywistego doświadczenia z kilku projektów i konsultacji ekspertów:
- Przede wszystkim ważne jest, aby pamiętać, że w procesie projektowania oprogramowania , nie ma to jak solidne dobra i zła. Tak długo, jak podejście działa dla twojego projektu i dobrze pasuje, jest to
right
, a jeśli nie jest to . Nie ma sztywnych zleceń w oprogramowaniu . IstniejeProject needs and specifications
. Ale ogólnie, został przyjęty przy użyciuDesign Patterns and Principles
sprawia projekt bardziejrobust
,reliable
ieasy to maintain
i uczynić kodloosely coupled and highly cohesive
. - Cała historia
Software Design and Architecture
dotyczy tego, w jaki sposób można łatwo zarządzać swoim projektem i jak można zachować przyszłe zmiany w postaci . Zastanów się, które podejście daje najlepszą odpowiedź na temat . To będzie najlepsze dla ciebie. Nie myśl zbyt wiele oProfessionalism
! . Twój projekt rośnie z upływem czasu i staje się bardziej dojrzały. Po prostu pomyśl o swoim projekcie! - Jako pierwszy krok i dla architektury aplikacji na poziomie przedsiębiorstwa, zawsze staraj się postępować zgodnie z
Separation of Concerns
lubSoC
. Oznacza to, że użytkownik powinien mieć różne poziomy dla różnych warstw projektu. To jest wysoce zalecane, aby użyć innego projekt w rozwiązania 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 projektu MVC dlaPresentation Layer
. Data Access Layer
to projekt skierowany do interakcji z bazami danych i bazami danych. Możesz mieć wszystkie swojeEntity Framework
lub podobne elementy w tym projekcie. Po oddzieleniu warstwy dla warstwy bazy danych oznacza to, że w przypadku zmiany hurtowni danych projektu, jedyną rzeczą, którą należy zmienić, jest zmiana tego projektu i kilka drobnych zmian w twoimBusiness Layer
. Wszystkie inne projekty w twoim rozwiązaniu pozostają nienaruszone. Więc możesz łatwo przejść z MS Sql do Oracle lub zEntity Framework
doNHibernate
.Domain Entities
to projekt, którego używam do definiowania wszystkich interfejsów poziomu, klas, wyliczeń i zmiennych na poziomie mojego rozwiązania. Ten projekt utrzymuje integralność w całym moim rozwiązaniu na moich zajęciach i moich metodach. Moje wszystkie klasy w całym rozwiązaniu są dziedziczone z interfejsów w tym projekcie .Tak więc mam jedno miejsce, aby zmienić moje klasy lub zmienne globalne , a to oznaczaEasy to Maintain
dla przyszłości w moim rozwiązaniu i łatwe do zrozumienia dla nowo przyłączonych programistów do projektu.Business Layer
to miejsce, w którym umieszczam całą logikę biznesową, w tymBusiness Entities
iBusiness Services
. Cały pomysł na temat tej warstwy o ma jedno miejsce, aby zachować wszystkie metody biznesowe i interakcje . Wszystkie obliczenia, modyfikacja obiektu i cała logika dotycząca danych obejmujących zapisywanie, pobieranie, zmienianie itd. Powinny się zdarzyć w tej sekcji. Korzystając z tej warstwy w projekcie, użytkownik może mieć różnych klientów w tym samym czasie, na przykład jedną warstwę natywnąMVC
i jedną warstwęWeb API
. Lub możesz podać różne karmienia oparte na specyfikacjach różnych usług dla klientów specyfikacji. Zdecydowanie zaleca się unikanie wprowadzania logiki biznesowej do sekcji kontrolerów warstwy MVC. Posiadanie dowolnej logiki biznesowej w kontrolerach oznacza, że używasz warstwy prezentacji jako warstwy logiki biznesowej i jest ona niezgodna zSeparation of Concerns
. Wtedy nie będzie łatwo zmienić z jednego odtwarzacza prezentacji na inny lub mieć inny typ klientów dla swojego rozwiązania . Lepiej jest zachować sekcję kontrolera w MVC tak wąską, jak . Kontrolery powinny mieć wyłącznie logikę i metody związane bezpośrednio z . Więcej informacji na tematView Models
znajduje się w sekcji7
. Jedna rzecz do zapamiętania, Lepiej jest mieć różne klasyBusiness Services
oparte na swoich rozwiązaniach obiektów lubBusiness Entities
.- w rozwiązaniu MVC będzie projektem 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żesz mieć jedną warstwę MVC i jedną
Web API
w jednym rozwiązaniu. Generalnie używaj warstwy prezentacji, aby zachować w niej całą logikę prezentacji. Logika prezentacji nie powinna mieć nic wspólnego z logiką biznesową lub logiki danych. Pytanie brzmi: co to jestPresentation logic
?Presentation logic
jest logiką związaną z modelami widoków. Zobacz modele są obiektami dostosowanymi do widoków lub stron. W większości przypadków obiekty biznesowe nie są odpowiednie do użycia w widokach. Z drugiej strony, widoki prezentacji zazwyczaj wymagają logiki sprawdzania poprawności lub logiki prezentacji , na przykład nazwy wyświetlanej innej niż oryginalne nazwy obiektów . W takich przypadkach lepiej oddzielić logikę prezentacji od logiki biznesowej, aby łatwo zmienić logikę lub logikę prezentacji niezależnie od siebie, a nawet łatwo zmienić warstwę prezentacji dla różnych projektów interfejsu użytkownika lub zmieniając logikę biznesową , zapewniając większą funkcjonalność bez obawy o każdej przerwie z logiką prezentacji. W przypadku użycia projektu MVC jako warstwy prezentacji dla rozwiązania, wszystkie modele widoku powinny być miejscami w sekcji projektu MVCModels
, a cała logika prezentacji powinna być umieszczona w sekcji projektu . - Ostatnią rzeczą, którą można powiedzieć o każdym rozwiązaniu wielowarstwowym, jest potrzeba ram dla mapowania obiektów do obiektów, na przykład w celu przekształcenia jednostki biznesowej w celu wyświetlenia modelu.Istnieje kilka narzędzi do tego celu , takich jak
AutoMapper
,BLToolkit
iEmitMapper
.
Ostatnie słowo: prosimy o komentarz i ocena question
i mój answer
zrobić to lepiej!
-1
Spójrz na Contoso University. Doskonały przykład aplikacji na poziomie Enterprise.
Czy znalazłeś przykład dobrego projektu? –
Zakładając, że trzymamy się szkieletu podmiotu, czy możemy zrobić z wygenerowanymi jednostkami jako Podmiotami Domena? Zakładam, że przejście do obsługiwanych baz danych, takich jak Oracle, powinno być bezproblemowe. – Tarik
@Tarik Czy możesz wyjaśnić swoje pytanie? – Hadee