ASP.net struktura projektu MVC

Stworzyłem następującą strukturę projektu dla mojego nowego asp.net projekt mvc każdy byłem po kilka opinii, jak inni ludzie strukturyzują swoje projekty i czy chciałbym poprawić moje...

Oto co mam do tej pory:

+Assets
-+Images 
-+Scripts 
-+Stylesheets 
-+...              'More things like the above here
+Controllers 
-+Support
--+Actions         'Any custom action classes
--+Controllers     'Base controller classes
+Models
-+Domain           'Contains any class that specialise view specific domain logic
--+UrlProcessing   'Encoding/decoding business entities as URL parts 
--+...             'More things like the above here
-+Views            'Contains view models
--+Support
---+Views          'Base classes for any view models
+Support
-+Application      'Global application interface classes (i.e. class that wraps the function of the global asax)
-+Configuration    'Typed config classes
-+Helpers          'Where you put additional html helper classes, etc
-+Services
--+Bootstrap       'Tasks that run on mvc start-up that are specific to the MVC project
--+Inversion       'Specific IoC registration registrations for this project 
--+...             'More things like the above here
+Views
-+Home
-+Shared 
-+...              'More things like the above here
Pozdrawiam Anthony]}
Author: Richard J. Ross III, 2009-07-07

4 answers

Mam podobną strukturę z pewnymi wyjątkami:

  1. wsparcie jest nazwane Infrastructure (przestrzeń nazw tylko dla UI Assembly use only)
  2. IoC jest w innym projekcie (project for globally used Infrastructure functionality). UI posiada rejestr StructureMaps tylko z nazwami asemblerów(IoC jest inicjowany przez Konwencję). Podejście rodzaj skradziony ze źródła CodeCampServer. Logowanie, sekcje konfiguracji również tutaj.
  3. Views / [ControllerName] has Partial podfolder, który może być jeszcze bardziej podzielony
    (polega to na żonglowaniu z ViewEngine, aby mógł znaleźć widoki / częściowe widoki).
  4. Views / [ControllerName] has LocalResources folder (with Partial subfolder)
  5. nie dodano żadnego podfolderu pod Controllers (...jeszcze). Lubię je utrzymywać w czystości i dość głupie.

I jeszcze kilka wyjątków związanych z modelem:

  1. Cała logika biznesowa żyje w domenie, domenie.Przestrzeń nazw modelu z trochę pomocy warstwy infrastruktury dla aspektów technicznych.
  2. modele widoku (nazywam je ViewData) znajdują się w zestawieniu interfejsu użytkownika w folderze ViewData, ułożonym w foldery podobne do widoków. Wybrane podejście z Kigg (poza tym, że układam je na widok jak SearchViewData, czasami nawet na widok częściowy).

Do tej pory działa wystarczająco dobrze

Zauważ, że strukturowanie ViewData (nawet struktura mojego javascript w ten sam sposób, View==plik JS, który zawiera wszystko pod obiektem o nazwie [ViewName]) per view może nie być akceptowalne dla bardziej skomplikowanych stron internetowych.

Oh... i = > folder = = przestrzeń nazw dla mnie. To chyba dobra praktyka.

 4
Author: Arnis Lapsa,
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
2009-07-07 00:48:59

MVC Site
app- Wszystkie statyczne pliki
-- wspólne
---- css
------ style-most-pages-use.css
----imgs
------ images-most-pages-use.png
----js
------ twój-zwyczaj-lib.js
-- Pliki
----release_notes.md
---- release_notes.html
-- strony
---- signin
------ signin.css
------ logo.png
------ signin.js
---- dashboard
------ deska rozdzielcza.js
-- sprzedawcy
---- jquery
------ jquery.1.11.1.js
- _referencje.js

Kontrolery- tylko cienkie Kontrolery, wystarczy kod, aby wywołać podstawowe funkcje biblioteki
Modele - Tylko modele, które są używane do wyświetlania widoku
Views - tylko kod klienta jak html, razor, css, itp

Core library
W zasadzie cały kod...dostęp do danych, atrybuty niestandardowe, narzędzia itp. Rozdzielenie kodu źródłowego na bibliotekę jest przydatne z wielu powodów. Twoja logika nie jest teraz związana tylko ze stroną internetową. Jeśli muszę, mogę zbudować szybki front end w WinForms do przetestowania trochę logiki albo przydałoby mi się to samo funkcje w warstwie dostępu do danych, aby utworzyć front-end administratora dla bazy danych.

Uważam, że ta struktura jest dla mnie najprostsza i najbardziej elastyczna.

Update
Zaktualizowałem statyczną strukturę plików zawartości, aby była bardziej elastyczna i nowoczesna. Wymyśliłem tę strukturę podczas pracy z AngularJS. W końcu ruszyłem do RactiveJS. Po przeprowadzce do RactiveJS ta sama konstrukcja działała naprawdę dobrze.

Aktualizacja 8-21-15 Ostatnio pracowałem nad większymi projektami i oddzielałem bibliotekę podstawową od własnego projektu Visual Studio. Dzięki temu jest elastyczny podczas korzystania z zewnętrznych elementów SVN. Mogę używać tej samej biblioteki w różnych projektach i tylko trzeba zrobić aktualizację SVN, aby uzyskać zmiany. Również złamał stronę MVC w swoim własnym projekcie również.

 5
Author: Donny V.,
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-08-21 13:07:18

Napisałem kilka (małych) stron i po prostu trzymałem się tej samej struktury, co NerdDinner i wydawało się, że działa dobrze.

Myślę, że przy mniejszych projektach to dobre podejście, o ile masz swoje problemy, nie umieszczaj logiki biznesowej w repozytorium(repozytoriach) itp. Pokusą w mniejszym projekcie jest rozmycie linii, ale MVC ma tendencję do karania cię trochę, gdy to robisz. :)

Większe projekty mogą wymagać wdrożenia oddzielnej klasy biznesowej projekt, a może nawet projekt tłumaczenia danych itp.

 1
Author: griegs,
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
2009-07-07 00:30:23

Myślę, że to trochę skomplikowane, ale jeśli to ma sens dla ciebie iść z nim. Ważne jest, aby zachować równowagę.

Jedną z rzeczy, które lubię robić z osobnymi projektami w ramach rozwiązania, ponieważ pozwala ono na ponowne wykorzystanie dostępu do danych i logiki biznesowej do ponownego wykorzystania przez inne typy aplikacji klienckich, takie jak WPF lub WinForms.

 1
Author: jgarcia,
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
2009-07-07 03:58:14