2010-11-18 15 views
9

He estado aprendiendo C# durante los últimos días para usar con ASP.NET para crear sitios web.Escribiendo código C# reutilizable para sitios web ASP.NET

soy muy nuevo en C#, pero he estado pensando acerca de cómo debería ir sobre escribir el código para que sea lo más reutilizable como sea posible.

Como un ejemplo rápido, digamos que quería crear una pieza de código para verificar los datos de inicio de sesión de un usuario que podría simplemente colocar en otro sitio en cualquier momento, y hacer que funcione con los datos que se le proporcionan.

recordando que no tengo idea de cómo debería compaginar un código para hacer esto, esta es la idea que se me ocurrió (Voy a ser breve con algún tipo de pseudo-código):

En primer lugar creo una clase:

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; 
     } 
    } 
} 

entonces habría una página aspx donde el formulario de acceso iría, por ejemplo:

<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> 

Y el código detrás de archivo se vería así:

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"); 
      } 
     } 
    } 
} 

Esto funciona como se esperaba, pero lo que yo quiero saber es:

  • ¿Hay una mejor manera de crear código reutilizable?
  • ¿Cómo se diseña el código reutilizable?

Estoy seguro de que debe haber una mejor manera para mí hacer esto, pero simplemente no puede pensar por mi cuenta.

Respuesta

13

Con respecto a formularios Web ASP.NET y reutilización, que hay que decir que el problema más común radica en poner demasiada lógica en los archivos de código subyacente. Los programadores, especialmente los nuevos en ASP.NET WebForms, tienden a poner allí partes de la lógica comercial e incluso el código de acceso a la base de datos. Después de un tiempo, convierte su aplicación en una gran propaganda difícil de mantener.

Extraiga su lógica empresarial en una capa separada. Acceda desde el código subyacente. Solo acceda, no impleméntelo directamente. Mantente alejado de la base de datos. Solo la capa comercial debe poder hablar con ella.

Incluso podría poner su lógica comercial y entidades de modelo de dominio en una biblioteca de clases separada. Entonces es como se vuelve reutilizable.

Estas son las primeras consideraciones simples antes de ensuciarse las manos con algunas codificaciones serias.

técnicas Reutilización en .NET su mayoría giran en torno a la estantería código común en las bibliotecas de clases para ser utilizado por una variedad de aplicaciones.

La reutilizabilidad aplicada a aplicaciones web (ASP.NET) generalmente se logra con UserControls (* .ascx) para la parte de presentación y expone partes de la aplicación a través de servicios web.

También se podría mencionar a mover la lógica de negocio en la capa de base de datos (ponerlo en procedimientos almacenados) pero éste se percibe comúnmente como controvertido en estos días.

+0

estoy de acuerdo! El desarrollo de 3 niveles o n niveles hace mucho del truco. La manera más fácil para los principiantes podría ser colocar "módulos" dentro de "App_Code" y luego simplemente llamar a las funciones desde allí. No mantenga la validación, etc. en el código subyacente. Solo "funciones de llamada" del código de página real detrás. – BerggreenDK

4

Tal vez el inicio de sesión es un mal ejemplo, porque hay ASP.NET built-in ways to do this, pero, en general, estás en el camino correcto: no pongas la lógica comercial que podrías querer reutilizar en la Página en sí, sino más bien en algunas clases; esto tiene la ventaja adicional de estructurar tu código en una forma más lógica: las cosas relacionadas con la interfaz de usuario están en la página ASPX (y su código detrás), la lógica del programa reside en clases separadas. Eventualmente, querrás mover algunas de esas clases a un proyecto de biblioteca separado, al que se pueden vincular muchas aplicaciones web diferentes.

Si desea volver a utilizar elementos de la interfaz de usuario de ASP.NET, que tienen la posibilidad de escribir ASP.NET Server Controls, que usted pone en su biblioteca y utilizar en sus páginas ASP.NET como esto:

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

La mejor forma en que he encontrado para volver a utilizar las páginas de WebForms y el código es para usar el patrón de MVP. Implementamos MVP para algunas de nuestras páginas en nuestro sitio web antiguo como described here, y cuando nos movimos a ASP.NET MVC, encontramos que el proceso era realmente simple.

+0

Debo señalar que MVP solo ayuda en lo que recomienda @Developer Art: separe su lógica de negocio del código detrás del código. –

0

Hay una solución simple para la reutilización de código en ASP.NET.

Después de investigar, encontré dos soluciones:

  • que trabajan con los directorios virtuales o
  • mover todo el contenido en el directorio raíz.

Comprobación de las dos soluciones, identificado lo que realmente hay que hacer: es suficiente para establecer simplemente la carpeta BIN de nuestro proyecto para apuntar al directorio raíz (C:\inetpub\wwwroot\bin).

Aquí hay un ejemplo simple en el archivo adjunto: LibExemplo.zip.

Actualmente uso SharpDevelop que no necesita instalaciones o configuraciones largas.

Saludos,

Reinaldo Fernando

Cuestiones relacionadas