Programacion en Capas C#

May 30, 2018 | Author: Anonymous | Category: C#
Share Embed


Short Description

PROGRAMACION EN CAPAS CON C# Tomado de varios documentos publicados en la Internet. Antologia ... Dicho de otra manera, ...

Description

 Antología Universidad Universida d Tecnológica Costarricense Mike Zamora González Ingenieria de Sistemas Computacionales

PROGRAMACION EN CAPAS CON C# Tomado de varios documentos publicados en la Internet

 Antologia

Contenido

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

No se encontraron elementosCancel de tabla de contenido. Download And Print

Prof. Mike Zamora González

Pág.:2

 Antologia

Contenido

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

No se encontraron elementosCancel de tabla de contenido. Download And Print

Prof. Mike Zamora González

Pág.:2

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

1 Programación ProgramaciónCancel por p or capas. Download And Print La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño. La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos. Dicho de otra manera, la programación en capas no es más que separar las "responsabilidades" del software en distintos "responsables". Esta separación facilita la mantención del software y permite, por ejemplo, cambiar fácilmente a los responsables. Para que se entienda daré un ejemplo de la vida moderna. Cuando una persona se somete a una operación, pasa por las manos de a lo menos tres personas: un anestesiólogo, el cirujano y un instrumentista. El primero se encarga de aplicar la anestesia, el segundo de realizar la operación y el tercero de facilitar al cirujano los instrumentos que requiere para dicha operación. Si la operación es de cerebro o de corazón la especialidad del cirujano debería ser distinta y por tanto el cirujano será otro. La programación en capas consiste precisamente en esto, identificar y separar las responsabilidades en miembros especializados de modo que si se requiere cambiar a un responsable, sea fácil hacerlo. La estructura más común de este concepto es la programación en tres capas. En ésta los responsables son el encargado de los datos, el encargado del negocio y el encargado de la interacción con el usuario. Desde luego las responsabilidades varían dependiendo del sistema y por consecuencia los responsables también, sin embargo, las responsabilidades antes mencionadas son las más comunes en los sistemas de administración. Espero que hasta este punto se entienda el concepto, y si es así, es probable que algunos estén pensado algo como "¡Ok, suena bonito!, pero ¿cómo llevo esto a una

Prof. Mike Zamora González

Pág.:3

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

aplicación?", pronto lo veremos con unos ejemplos por ahora continuaremos con la teoria.

Cancel

Download And Print

La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, solo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos.  Además, permite pe rmite distribuir el trabajo de creación de una aplicación por niveles; de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la API que existe entre niveles. En el diseño de sistemas informáticos actual se suelen usar las arquitecturas multinivel o Programación por capas. En dichas arquitecturas a cada nivel se le confía una misión simple, lo que permite el diseño de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que las necesidades aumenten). El más utilizado actualmente es el diseño en tres niveles (o en tres capas)

Prof. Mike Zamora González

Pág.:4

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

1.1 Capas y niveles

Print 1. Capa de presentación: Cancel  la que ve Download el usuarioAnd (también se la denomina "capa de

usuario"), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). También es conocida como interfaz gráfica y debe tener la característica de ser "amigable" (entendible y fácil de usar) para el usuario. Esta capa se comunica únicamente con la capa de negocio. 2. Capa de negocio:  es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse (Reglas de Negocio). Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o recuperar datos de él. También se consideran aquí los programas de aplicación, validaciones y procesos específicos de la informacion. 3. Capa de datos:  es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio. Aquí no solo pueden ser gestores de bases de datos, el alamacenamiento puede ser de cualquier tipo existente. También hay preprocesamiento de datos y algunos procesos específicos de la información. Todas estas capas pueden residir en un único computador, si bien lo más usual es que haya una multitud de servidores o computadores en donde reside la capa de presentación (son los clientes de la arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el mismo computador, y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o más servidores o computadores.

Prof. Mike Zamora González

Pág.:5

 Antologia

 Progamacion en Capas con C#

Print document

In order to print this document from Scribd, you'll first need to download it.

 Así, si el tamaño o complejidad de la base de datos aumenta, se puede separar en varios servidores o computadores los cuales recibirán las peticiones del computador en Cancel Download And Print que resida la capa de negocio. Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la separación, esta capa de negocio podría residir en uno o más servidores o computadores que realizarían solicitudes a una única base de datos. En sistemas muy complejos se llega a tener una serie de servidores o computadores sobre los cuales corre la capa de negocio, y otra serie de servidores o computadores sobre los cuales corre la base de datos. En una arquitectura de tres niveles, los términos "capas" y "niveles" no significan lo mismo ni son similares. El término "capa" hace referencia a la forma como una solución es segmentada desde el punto de vista lógico: 

Presentación. (Conocida como capa Web en aplicaciones Web o como capa de usuario en Aplicaciones Nativas)



Lógica de Negocio. (Conocida como capa Aplicativa)



Datos. (Conocida como capa de Base de Datos)

En cambio, el término "nivel" corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física. Por ejemplo: 

Una solución de tres capas (presentación, lógica del negocio, datos) que residen en un solo computador (Presentación+lógica+datos). Se dice que la arquitectura de la solución es de tres capas y un nivel.



Una solución de tres capas (presentación, lógica del negocio, datos) que residen en

dos

servidores

o

computadores

(presentación+lógica

por

un

lado;

lógica+datos por el otro lado). Se dice que la arquitectura de la solución es de tres capas y dos niveles.

Prof. Mike Zamora González

Pág.:6

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

2 Programación en capas con un ejemplo en Cancel

Download And Print

C# El ejemplo consistirá en algo tan simple como un mantenedor de datos de personas (nombre, teléfono y correo electrónico) y nuestros responsables se encargarán de lo siguiente:

2.1 Datos Leerá y grabara los datos en un archivo de texto.

2.2 Negocio Entregará los datos al encargado de la interacción con el usuario y se encarga de las validaciones que serán dos: 

El nombre no puede estar en blanco.



El correo electrónico, si es ingresado, debe ser válido.

2.3 Interface (interacción con el usuario) Contendrá 

Una grilla para mostrar y editar los datos.



Un botón Cargar



Un botón Guardar

2.4 Ejemplo. Una vez definida las responsabilidades, es necesario tener en cuenta que hay un elemento que los tres responsables deben conocer. Me refiero a la "persona" o mejor dicho a sus datos, está claro que el encargado de datos debe saber que grabar y que

Prof. Mike Zamora González

Pág.:7

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

leer, el encargado de negocios debe saber sobre que aplicar las reglas de negocio y el encargado de la interacción con el usuario debe saber que datos mostrar o pedir. Cancel Download And Print El siguiente diagrama ilustra lo anterior:

Para quienes no sepan interpretar el diagrama, se lee así: 

Presentación utiliza Negocio



Uno o más Negocios utilizan solo un Dato



Presentación, Negocio y Dato requieren de Persona.

 Al momento de construir la aplicación, es una buena práctica separar las responsabilidades en proyectos distintos de manera que quede claramente indicada la responsabilidad de cada proyecto, sin embargo, me ha tocado ver aplicaciones en donde separan las responsabilidades en carpetas, el único problema importante que veo en separar en carpetas es que podrían generarse conflictos de responsabilidad y desorden, por ejemplo, un programador inexperto podría utilizar el método grabar de la clase Dato desde la Presentación, lo que implicaría que se estaría saltando las reglas de negocios, en nuestro caso, no se validaría el nombre ni el correo electrónico. De todos modos aquí está el código:

Prof. Mike Zamora González

Pág.:8

 Antologia

Print document

2.4.1 Presentación:

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

namespace EjemploTresCapas

Cancel

{

Download And Print

 partial class Presentacion {  ///  ///

Variable del diseñador requerida.

 ///  private System.ComponentModel.IContainer components = null;  ///  /// Limpiar los recursos que se estén utilizando.  ///  /// true si los recursos administrados se deben eliminar; false en caso contrario.  protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Código generado por el Diseñador de Windows Forms  ///  /// Método necesario para admitir el Diseñador. No se puede modificar  /// el contenido del método con el editor de código.  ///  private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.dgPersona = new System.Windows.Forms.DataGridView(); this.nombreDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.telefonoDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();

Prof. Mike Zamora González

Pág.:9

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

this.emailDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();

Cancel Download And Print this.personaBindingSource = new System.Windows.Forms.BindingSource(this.components); this.btnCargar = new System.Windows.Forms.Button(); this.btnGrabar = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dgPersona)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.personaBindingSource)).BeginInit(); this.SuspendLayout();  //  // dgPersona  // this.dgPersona.AllowUserToOrderColumns = true; this.dgPersona.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top

|

System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.dgPersona.AutoGenerateColumns = false; this.dgPersona.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgPersona.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.nombreDataGridViewTextBoxColumn, this.telefonoDataGridViewTextBoxColumn, this.emailDataGridViewTextBoxColumn}); this.dgPersona.DataSource = this.personaBindingSource; this.dgPersona.Location = new System.Drawing.Point(0, 0); this.dgPersona.Name = "dgPersona"; this.dgPersona.Size = new System.Drawing.Size(737, 368); this.dgPersona.TabIndex = 0;  //  // nombreDataGridViewTextBoxColumn  // this.nombreDataGridViewTextBoxColumn.DataPropertyName = "Nombre"; this.nombreDataGridViewTextBoxColumn.HeaderText = "Nombre"; this.nombreDataGridViewTextBoxColumn.Name = "nombreDataGridViewTextBoxColumn";

Prof. Mike Zamora González

Pág.:10

 Antologia

Print document

 //

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

 // telefonoDataGridViewTextBoxColumn  //

Cancel

Download And Print

this.telefonoDataGridViewTextBoxColumn.DataPropertyName = "Telefono"; this.telefonoDataGridViewTextBoxColumn.HeaderText = "Telefono"; this.telefonoDataGridViewTextBoxColumn.Name = "telefonoDataGridViewTextBoxColumn";  //  // emailDataGridViewTextBoxColumn  // this.emailDataGridViewTextBoxColumn.DataPropertyName = "Email"; this.emailDataGridViewTextBoxColumn.HeaderText = "Email"; this.emailDataGridViewTextBoxColumn.Name = "emailDataGridViewTextBoxColumn";  //  // personaBindingSource  // this.personaBindingSource.DataSource = typeof(EjemploTresCapas.Entidad.Persona);  //  // btnCargar  // this.btnCargar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom

|

System.Windows.Forms.AnchorStyles.Right))); this.btnCargar.Location = new System.Drawing.Point(569, 374); this.btnCargar.Name = "btnCargar"; this.btnCargar.Size = new System.Drawing.Size(75, 23); this.btnCargar.TabIndex = 1; this.btnCargar.Text = "Cargar"; this.btnCargar.UseVisualStyleBackColor = true; this.btnCargar.Click += new System.EventHandler(this.btnCargar_Click);  //  // btnGrabar  // this.btnGrabar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom

|

System.Windows.Forms.AnchorStyles.Right))); this.btnGrabar.Location = new System.Drawing.Point(650, 374);

Prof. Mike Zamora González

Pág.:11

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

this.btnGrabar.Name = "btnGrabar";

this.btnGrabar.Size = new System.Drawing.Size(75, 23);

Cancel And Print this.btnGrabar.TabIndex =Download 2; this.btnGrabar.Text = "Grabar"; this.btnGrabar.UseVisualStyleBackColor = true; this.btnGrabar.Click += new System.EventHandler(this.btnGrabar_Click);  //  // Presentacion  // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(737, 404); this.Controls.Add(this.btnGrabar); this.Controls.Add(this.btnCargar); this.Controls.Add(this.dgPersona); this.Name = "Presentacion"; this.Text = "Form1"; ((System.ComponentModel.ISupportInitialize)(this.dgPersona)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.personaBindingSource)).EndInit(); this.ResumeLayout(false); } #endregion  private System.Windows.Forms.DataGridView dgPersona;  private System.Windows.Forms.Button btnCargar;  private System.Windows.Forms.Button btnGrabar;  private System.Windows.Forms.DataGridViewTextBoxColumn nombreDataGridViewTextBoxColumn;  private System.Windows.Forms.DataGridViewTextBoxColumn telefonoDataGridViewTextBoxColumn;  private System.Windows.Forms.DataGridViewTextBoxColumn emailDataGridViewTextBoxColumn;  private System.Windows.Forms.BindingSource personaBindingSource; } }

Prof. Mike Zamora González

Pág.:12

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

using EjemploTresCapas.Entidad; using System;

Cancel using System.Collections.Generic;

Download And Print

using System.Configuration; using System.Windows.Forms; namespace EjemploTresCapas {  public partial class Presentacion : Form {  private Negocio.Negocio _negocio;  public Presentacion() { InitializeComponent();  _negocio = new Negocio.Negocio(ConfigurationManager.AppSettings["ArchivoDatos"]);  personaBindingSource.DataSource = new List(); }  private void btnCargar_Click(object sender, EventArgs e) { try {  personaBindingSource.DataSource = _negocio.Leer(); } catch (Exception error) {  MessageBox.Show(error.Message); } }  private void btnGrabar_Click(object sender, EventArgs e) { try { if (personaBindingSource.DataSource != null &&  personaBindingSource.DataSource is List)  _negocio.Grabar(personaBindingSource.DataSource as List); }

Prof. Mike Zamora González

Pág.:13

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

catch (Exception error) {

Cancel Download And Print  MessageBox.Show(error.Message); } } } }

2.4.2 Negocio: using EjemploTresCapas.Dato; using EjemploTresCapas.Entidad; using System; using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; namespace EjemploTresCapas.Negocio {  public class Negocio {  private bool _emailInvalido;  private Datos _dao;  public Negocio(string nombreArchivo) { this._dao = Datos.Instancia(nombreArchivo); }  public List Leer() { return this._dao.Leer(); }  public void Grabar(List datos) {  foreach (Persona item in datos) { if (string.IsNullOrWhiteSpace(item.Nombre)) throw new Exception("El nombre de la persona no puede ser vacio.");

Prof. Mike Zamora González

Pág.:14

 Antologia

Print document

 Progamacion en Capas con C#

In order to print this document from Scribd, you'll first need to download it.

if (!string.IsNullOrEmpty(item.Email) && !IsValidEmail(item.Email)) throw new Exception(string.Format("El correo electrónico {0} no es válido", item.Email));

Cancel

Download And Print

} this._dao.Grabar(datos); }  public bool IsValidEmail(string strIn) {  _emailInvalido = false; if (String.IsNullOrEmpty(strIn)) return false;  // Use IdnMapping class to convert Unicode domain names. try { strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200)); } catch (RegexMatchTimeoutException) { return false; } if (_emailInvalido) return false;  // Return true if strIn is in valid e-mail format. try { return Regex.IsMatch(strIn,  @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?
View more...

Comments

Copyright © 2017 DATENPDF Inc.