2010-11-18 10 views
9

Ho imparato C# per gli ultimi giorni da utilizzare con ASP.NET per creare siti Web.Scrittura codice C# riutilizzabile per siti Web ASP.NET

Sono molto nuovo a C# ma ho pensato a come dovrei andare a scrivere il mio codice per renderlo il più possibile riutilizzabile.

Come esempio rapido, diciamo che volevo creare un pezzo di codice per verificare i dettagli di accesso di un utente che potrei semplicemente rilasciare in un altro sito in qualsiasi momento e farlo funzionare con i dati che vengono dati.

ricordare che non ho idea di come dovrei impaginare il mio codice per fare questo, questa è l'idea mi è venuta (io tenerlo a breve con una sorta di pseudo codice):

prima cosa creare un classe:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Module { 
    public class Login { 
     public static bool check_login(string usernameCheck = "", string passwordCheck = "") { 
      if(usernameCheck == "user" && passwordCheck == "password") { 
       return true; 
      } 

      return false; 
     } 
    } 
} 

allora avrei una pagina aspx in cui il modulo di accesso sarebbe andato, per esempio:

<asp:Content ContentPlaceHolderID="column1" runat="server"> 
    <asp:TextBox ID="usernameInput" runat="server"></asp:TextBox> 
    <asp:TextBox ID="passwordInput" runat="server"></asp:TextBox> 
    <asp:Button OnClick="check_login" Text="Login" runat="server" /> 
</asp:Content> 

E il codice al file sarebbe simile a questa:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Module { 
    public partial class _default : System.Web.UI.Page { 
     protected void Page_Load(object sender, EventArgs e) { 

     } 

     protected void check_login(object sender, EventArgs e) { 
      if(Login.check_login(usernameInput.Text, passwordInput.Text)) { 
       Response.Redirect("some other place"); 
      } 
     } 
    } 
} 

Questo funziona come previsto, ma quello che voglio sapere è:

  • C'è un modo migliore per creare codice riutilizzabile?
  • Come si progetta il codice riutilizzabile?

Sono sicuro che ci deve essere un modo migliore per farlo, ma non riesco a pensarci da solo.

risposta

13

Per quanto riguarda i WebForm e la riusabilità di ASP.NET, si deve dire che il problema più comune consiste nel mettere troppa logica nei file code-behind. I programmatori, in particolare quelli nuovi per i WebForm di ASP.NET, tendono a inserire parti della logica aziendale e persino il codice di accesso al database. Dopo un po ', trasforma la loro applicazione in un gigantesco blurb di difficile manutenzione.

Estrai la tua logica aziendale in un livello separato. Accedilo dal code-behind. Basta accedere, non implementarlo direttamente. Stai lontano dal database. Solo il livello aziendale dovrebbe poter parlare con esso.

Si potrebbe persino inserire la logica aziendale e le entità del modello di dominio in una libreria di classi separata. Quindi è come diventa riutilizzabile.

Queste sono le prime semplici considerazioni prima che ti sporchi le mani con una codifica seria.

Le tecniche di riutilizzabilità in .NET ruotano principalmente attorno al codice comune di shelving in librerie di classi per essere utilizzate da una varietà di applicazioni.

La riusabilità applicata alle applicazioni Web (ASP.NET) viene solitamente ottenuta con UserControls (* .ascx) per la parte di presentazione e l'esposizione di parti dell'applicazione tramite servizi Web.

Si potrebbe anche menzionare lo spostamento della logica di business nel livello di database (inserendolo in stored procedure) ma questo è comunemente percepito come controverso in questi giorni.

+0

sono d'accordo! Lo sviluppo a 3 o più livelli fa molto. Il modo più semplice per i principianti potrebbe essere inserire "moduli" all'interno di "App_Code" e quindi chiamare le funzioni da lì. Non mantenere la convalida ecc. Nel codice sottostante. Solo "funzioni di chiamata" dal codice della pagina attuale. – BerggreenDK

4

Forse il login è un cattivo esempio, perché ci sono ASP.NET built-in ways to do this, ma, in generale, sei sulla strada giusta: non mettere la logica aziendale che potresti voler riutilizzare nella Pagina stessa, ma piuttosto in alcune classi - questo ha l'ulteriore vantaggio di strutturare il tuo codice in un modo più logico: roba relativa all'interfaccia utente è nella pagina ASPX (ed è codebehind), la logica del programma risiede in classi separate. Alla fine, vorrai spostare alcune di queste classi in un progetto di libreria separato, che può essere collegato a molte applicazioni Web diverse.

Se si desidera riutilizzare elementi dell'interfaccia utente ASP.NET, si ha la possibilità di scrivere ASP.NET Server Controls, che mettete nel vostro biblioteca e utilizzare per le pagine ASP.NET come questo:

<asp:Content ContentPlaceHolderID="column1" runat="server"> 
    <custom:MyCustomLoginControl runat="server" 
           OnSuccessRedirectTo="myStartPage.aspx" /> 
</asp:Content> 
1

La migliore modo che ho trovato per riutilizzare le pagine WebForms e il codice è quello di utilizzare il modello MVP. Abbiamo implementato MVP per alcune delle nostre pagine sul nostro vecchio sito Web come described here e, quando ci siamo spostati su ASP.NET MVC, abbiamo trovato il processo molto semplice.

+0

Devo notare che MVP aiuta solo in ciò che @Developer Art consiglia: separare la logica aziendale dal codice che sta dietro al codice. –

0

Esiste una soluzione semplice per riutilizzare il codice in ASP.NET.

Dopo la ricerca, ho trovato due soluzioni:

  • che lavorano con le directory virtuali o
  • mossa l'intero contenuto nella directory principale.

Controllo delle due soluzioni, identificato ciò che ha davvero bisogno di essere fatto: è sufficiente impostare solo la cartella BIN del nostro progetto per indirizzare la directory principale (C:\inetpub\wwwroot\bin).

Ecco un semplice esempio nel file allegato: LibExemplo.zip.

Attualmente utilizzo SharpDevelop che non richiede lunghe installazioni o configurazioni.

saluti,

Reinaldo Fernando

Problemi correlati