2009-02-01 4 views
13

Come mai App_Code non è una scelta nel sottomenu Aggiungi cartella ASP.NET in VS solution explorer? Mi rendo conto che è possibile crearne uno manualmente semplicemente rinominando una nuova cartella, ma qual è il razionale qui? Non è questo il punto in cui si suppone di mettere classi di tipo "utility" o "service layer"?ASP.NET MVC Project e la cartella App_Code

Su una nota a margine del progetto MVC. Mi piace il fatto che esista un riferimento a System.Configuration out-of-the-box a differenza dei progetti di moduli Web ASP.NET predefiniti.

risposta

10

La vera risposta è perché Microsoft vuole che tu compri che hai bisogno di VS per fare MVC. Tuttavia, per convertire il progetto in puro JIT, è molto più facile lavorare con ...

Si può fare abbastanza semplice.

(1) Spostare tutte le cartelle contenenti i file delle classi di App_Code (lasciare Visualizzazioni cartella in cui è)
(2) Fai Global.asax non ha bisogno di un codice dietro o riferimento eredita rimuovendo quegli attributi poi mettendo

[script runat="server"] 
... place contents of code behind's class inner code 
[/script] 

ed eliminare il codice dietro per sempre

(3) nel Bin Rimuovere il riferimento DLL del progetto evitando di mettere le altre DLL necessarie in termini di corsa MVC
(4) Re sposta i file delle soluzioni e la cartella delle proprietà e della cartella obj

Lo faccio regolarmente per Nop MVC poiché è molto più semplice lavorare con il livello Web su JIT. Gli sviluppatori che non lo capiscono non lavorano ogni giorno nelle trincee su molti siti Web con varie soluzioni rapide personalizzate necessarie. I siti su cui lavoriamo ottengono centinaia di migliaia di visite al giorno, quindi l'utilizzo di JIT non comporta penalità legate alle prestazioni dopo l'urto iniziale.
Sembra che sia di meno quando si tratta di sviluppare siti Web di dimensioni minori.

+1

fantastico "aggirare". – BuddyJoe

+1

A proposito, ho smesso di funzionare con MVC. Uso solo lo stile Matrix puro con URL Rewrite. C'è meno codice. Bene, sto iniziando a fare tutto Linuxy ora comunque mentre ci siamo. Node.js lo sta davvero uccidendo. –

+0

Aiuta anche a testare [RequireHttps] e lasciarlo solo senza una serie di istruzioni spazzatura nel codice. –

10

Generalmente, inserisco le classi "livello servizio" e "utilità" in un progetto separato e lo aggiungo come riferimento alla mia applicazione web. Con il framework MVC, non vedo davvero la necessità di compilare le classi in fase di runtime.

+0

Che dire della velocità di sviluppo? Cambia codice/salva/aggiorna browser o Cambia codice/salva/crea .../aggiorna browser. –

+0

David, metti i tuoi progetti nella stessa soluzione e metti il ​​riferimento o progetti completamente diversi e prendi il riferimento? – johnny

+1

@johnny Nella stessa soluzione, a meno che non si tratti di una libreria generica che riutilizzerò altrove. –

21

Ciò è probabilmente dovuto al fatto che un progetto ASP.NET MVC è un'applicazione Web anziché un sito Web. In un sito Web, i file di classe vengono compilati in modo dinamico in fase di esecuzione e devono vivere nella cartella App_Code. In un'applicazione Web, tutto viene compilato staticamente e i file di classe possono essere pubblicati ovunque nella tua applicazione web.

Come indicato da David Brown, in genere è consigliabile inserire una definizione di classe extra in una libreria di classi separata e quindi fare riferimento a quella dalla propria applicazione Web. Se si scrivono i test unitari o si fa riferimento alle classi dai file di configurazione, può essere difficile o impossibile accedere a queste classi se sono definite solo all'interno dell'applicazione Web.

+0

+1. Ho anche notato che è un "Converti in applicazione Web" di cosa si tratta? perché è un'opzione in MVC? – BuddyJoe

+0

+1 per spiegarlo meglio di quanto ho fatto io. ;) –

+0

Ironia della sorte, "Convert to Web Application" è disponibile solo per le applicazioni Web! Questa opzione è in realtà per le applicazioni Web che sono state convertite da siti Web. Questo passa attraverso tutti i tuoi file aspx e ascx e li converte in formato di applicazione web. – davogones

0

Per coloro che non desiderano una seconda libreria di progetto/classe e desiderano semplicemente una cartella per alcune classi C#, propongo "App_Classes".