Sitio Web del poderoso ChicoDotNet

Sitio Web del poderoso ChicoDotNet es el lugar donde puedes aprender todo lo nuevo sobre desarrollo de aplicaciones para Windows, ASP .NET, SmartClient y adquirir los súper poderes que te da la mejor plataforma de creación de programas: Microsoft .NET

20071119

Visual Studio 2008 Liberado

Visual Studio 2008

Por fin llegó el momento esperado por los arquitectos y desarrolladores .NET:

Microsoft acaba de liberar Visual Studio 2008, si tienes una suscripción MSDN puedes descargar la versión definitiva desde el sitio de MSDN. Si no la tienes puedes obtener gratis una versión de prueba de Visual Studio 2008 de 90 días.

Microsoft Visual Studio 2008 provee una experiencia de desarrollo líder en la industria para desarrollar aplicaciones para Windows Vista y Windows XP, el Microsoft Office System 2007 y la Web, incluyendo innovaciones en el desarrollo de lenguajes de programación con nuevas versiones de C# y Visual Basic.

Si tenías una versión beta de Visual Studio 2008 instalada te recomiendo que te des una vuelta por las instrucciones para la desinstalación de versiones anteriores. Si quieres conocer a fondo las características nuevas de este entorno de desarrollo puedes descargar el Whitepaper.

Hay varias versiones de Visual Studio 2008 como he comentado anteriormente:

Visual Studio 2008 Professional Edition y Visual Studio 2008 Standard Edition potencializan a los indivíduos y pequeños equipos de desarrolladores para entregar aplicaciones conectadas que aprovechan las ventajas de las últimas tecnologías que les permiten alcanzar más efectivamente los ojetivos de negocio.

Microsoft Visual Studio Team System 2008 es una solución integrada de Ciclo de Vida de las Aplicaciones (Application Lifecycle Management - ALM) que incluye herramientas, procesos y mjores prácticas que ayudan a todos los miembros de los equipos de desarrollo a mejorar sus habilidades y trabajar juntos de una manera mucho más efectiva.

También como ya es costumbre desde las fases beta se liberó la versión final de las Visual Studio Express Editions 2008, permitiendo a los programadores independientes, estudiantes y apasionados de la tecnología por pasatiempo desarrollar aplicaciones para Web, dispositivos móviles y para Windows, pudiendo elegir lenguajes tales como Visual Basic, C# y C++ en sus versiones más recientes.

Así mismo se liberaron herramientas de extensibilidad para amplificar la productividad y facilitar la colaboración en equipo, tales como Visual Studio Software Development Kit (SDK), Visual Studio 2008 Shell, y Visual Studio Tools for Applications (VSTA). Además ya hay un montón de extensiones para integrarse y etender la funcionalidad de VS2008.

Etiquetas: , , , , ,

Visual Studio 2008 Liberado

Escrito por Alfonso Lara Ramos @ 09:00 0 comentarios

Busca Visual Studio 2008 Liberado en Technorati | Guarda Visual Studio 2008 Liberado en Yahoo | Guarda Visual Studio 2008 Liberado en Google Bookmarks | Envía Visual Studio 2008 Liberado a Furl | Envía Visual Studio 2008 Liberado a Newsvine | Guarda Visual Studio 2008 Liberado en Ma.gnolia.com | Envía Visual Studio 2008 Liberado a Reddit | Envía Visual Studio 2008 Liberado a BarraPunto | Envía Visual Studio 2008 Liberado a Digg | Envía un Meme sobre Visual Studio 2008 Liberado | Guarda Visual Studio 2008 Liberado en del.icio.us | Envía Visual Studio 2008 Liberado a Fresqui | Menea Visual Studio 2008 Liberado en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070820

Microsoft Visual Basic 2005 Power Packs 2.0

Esta entrada de blog esta dedicado a mi amigo Perkele que esta a punto de iniciar su blog en breve. Precisamente porque en varias ocasiones le recomendé el espacio de nombres que aprovecha esta tecnología y sacó cosas muy padres en sus aplicaciones.

Los power packs para Visual Basic 2005 son cuatro sencillos controles que te permiten crear interases ricas de usuario utilizando el espacio de nombres System.Drawing de manera cómoda para hacer botones con figuras geométricas, insertar dibujos de líneas o implementar un control de impresión en tus aplicaciones VB.NET cuando por ejemplo las políticas de la organización no han autorizado aún usar .NET 3.0 y por lo tanto estás limitado(a) para implementar con Windows Presentation Foundation.

Los controles encapsulan muchas de las funcionalidades del espacio de nombres System.Drawing, por lo que puedes utilizar texturas, mapas de bits o degradados en tus gráficos sin tener que programarlo todo, un ejemplo interesante de esto es crear gráficos de barras.

Monito creado en menos de 3 minutos utilizando los Microsoft Visual Basic 2005 Power Packs 2.0

Eché de menos la creación de triángulos, lo cual permitiría generar todo tipo de figuras como se hace con XAML pero es una forma sencilla de agregar gráficos a tus aplicaciones .NET 2.0

Los Microsoft Visual Basic 2005 Power Packs 2.0 vienen con funcionalidad de usuario encapsulada

Una cosa padre es que puedes migrar la antigüa funcionalidad de VB 6.0 de imprimir para hacer reportes gráficos rápidamente sin tener que reescribir toda la lógica nuevamente y que los gráficos ya vienen listos para que no tengas que definir plumas o brochas.

Puedes descargar sólamente el paquete en inglés de Microsoft Visual Basic 2005 Power Packs 2.0 pero se instala sin problemas en tu Visual Studio aunque esté en otro idioma y viene con todo lo necesario para que despliegues por medio de Click Once, por ser controles estándar de .NET puedes implementarlos también en tus proyectos de C# o incluso encapsularlos dentro de servicios Web para exponer los gráficos directamente desde repositorios centrales de objetos.

Etiquetas: , , ,

Microsoft Visual Basic 2005 Power Packs 2.0

Escrito por Alfonso Lara Ramos @ 21:30 0 comentarios

Busca Microsoft Visual Basic 2005 Power Packs 2.0 en Technorati | Guarda Microsoft Visual Basic 2005 Power Packs 2.0 en Yahoo | Guarda Microsoft Visual Basic 2005 Power Packs 2.0 en Google Bookmarks | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a Furl | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a Newsvine | Guarda Microsoft Visual Basic 2005 Power Packs 2.0 en Ma.gnolia.com | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a Reddit | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a BarraPunto | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a Digg | Envía un Meme sobre Microsoft Visual Basic 2005 Power Packs 2.0 | Guarda Microsoft Visual Basic 2005 Power Packs 2.0 en del.icio.us | Envía Microsoft Visual Basic 2005 Power Packs 2.0 a Fresqui | Menea Microsoft Visual Basic 2005 Power Packs 2.0 en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070624

Patrones y antipatrones de arquitectura: Constructor

En esta ocasión continúo con la serie de artículos acerca de patrones y antipatrones de arquitectura. Espero que les sea útil. Ejemplificaré utilizando VB.NET y C# en cada uno de los patrones.

Tipo de patrón

Creador de objetos

Objetivo

Separar la trucción de un objeto complejo de su representación, de modo que un solo constructor pueda crear diferentes representaciones.

Motivación

Es importante en muchos casos tener objetos que tienen diferentes características pero que comparten una estructura en común, el problema viene de que los diferentes objetos en común pueden ser ilimitados, por lo tanto es muy útil el poder modificar las diferentes opciones sin tener que modificar el objeto que lee las características. Cada uno de los sub objetos de la clase principal se especializan en diferentes características pero se construyen desde un solo lugar. El patrón constructor captura todas las relaciones entre la clase principal y sus subclases, cada subclase especializada es llamada constructor especializado y el lector de sub clases es llamado director.

Aplicación

Debe usarse el patrón Constructor cuando el algoritmo para la creación de un objeto complejo deba ser independiente de las partes que lo conforman y cómo son ensambladas y cuando el proceso de construcción deba permitir diferentes representaciones del objeto construído.

Estructura

Patrón constructor en VB .NET

Patrón constructor en C#

Participantes

Constructor: ConstructorDeDodgeAvenger. Establece una interfase abstracta para crear las partes de un objeto producto.

Constructores concretos: Avenger20SEMTX, Avenger24SEATX, AvengerSXTATX y AvengerSXTATXSport. Construyen y ensamblan partes del producto implementando la interfase del constructor.

Director: Armadora. Construye un objeto utilizando la interfase del constructor.

Producto: DodgeAvenger. Representa el objeto concreto que se está construyendo, los constructores concretos construyen la represeon interna del producto y definen el proceso por el cuál es ensamblado. Incluye clases que definen las partes que lo constituyen, incluyendo las interfases para ensamblar las partes en el resultado final.

Colaboración

  • El Cliente crea el objeto Director y lo configura utilizando el constructor deseado.
  • El Director notifica al Constructor cuando una parte del producto debe ser construída.
  • El Constructor maneja las peticiones del Director y añade las partes del Producto.
  • El Cliente obtiene el producto del Constructor.

El siguiente diagrama de interacción ilustra la manera en que el objeto Constructor y el objeto Director interactúan con el Cliente.

Diagrama de interacción patrón Constructor

Consecuencias

Los beneficios del uso del patrón Constructor son los siguientes:

  • Permite variar la representación interna de un producto.
  • Aisla el código de representación y el de construción.
  • Da un mayor control en el proceso de construcción.

Implementación

Un ejemplo de implementación puede ser un configurador de automóviles, este genera las propiedades comunes del modelo de automóvil pero deja a los constructores concretos la tarea de asignar accesorios opcionales según el tipo de edición de atomóvil que se elija construír. Nuevas ediciones (representaciones) del mismo modelo de automóvil pueden construírse sobre la misma clase constructora sin necesidad de cambiar la lógica de construcción de las demás ediciones.

Código de ejemplo

VB.NET

Namespace Patrones
Public Enum TipoDeEstereo
AM_FM_CD_MP3
AM_FM_CD_MP3_ControlDeAudioEnElVolante
End Enum
Public Enum NumeroDeBocinas
Cuatro = 4
Seis = 6
End Enum
Public Enum TipoDeVolante
Plastico_AjusteInclinacion_AjusteTelescopico
Piel_AjusteInclinacion_AjusteTelescopico
End Enum
Public Enum TipoDeRines
Acero17
Aluminio17
End Enum
Public Enum TipoMotor
_1998_4cil_16valvulasDOHC
_2360_4cil_16valvulasDOHC
End Enum
Public Enum Potencia
_158HP_6400rpm
_172HP_6000rpm
End Enum
Public Enum Torque
_141Lb_Ft_5000rpm
_165Lb_Ft_4400rpm
End Enum
Public Enum Transmision
Manual5Velocidades
Automatica4Velocidades
End Enum
Public Class DodgeAvenger
Dim _Estereo As TipoDeEstereo
Dim _Bocinas As NumeroDeBocinas
Dim _ControlDeVelocidad As Boolean = True
Dim _Acabados As String = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas"
Dim _Seguros As String = "Eléctricos a control remoto"
Dim _Vestiduras As String = "Tela"
Dim _Volante As TipoDeVolante
Dim _Direccion As String = "Hidráulica"
Dim _AireAcondicionado As Boolean = True
Dim _Retrovisores As String = "Electricos"
Dim _Cristales As String = "Electricos"
Dim _Rines As TipoDeRines
Dim _Frenos As String = "2 De disco 2 ventilados delanteros"
Dim _InmovilizadorElectronicoMotor As Boolean = True
Dim _BolsasDeAire As String = "Conductor y pasajero"
Dim _Motor As TipoMotor
Dim _Potencia As Potencia
Dim _Torque As Torque
Dim _Transmision As Transmision
Dim _Spoiler As Boolean
Dim _UConnect As Boolean
Dim _Quemacocos As Boolean
Dim _FarosDeNiebla As Boolean
Public Sub New()
End Sub
Public Sub ConfiguraEstereo(ByVal estereo As TipoDeEstereo)
Me._Estereo = estereo
End Sub
Public Sub ConfiguraBocinas(ByVal bocinas As NumeroDeBocinas)
Me._Bocinas = bocinas
End Sub
Public Sub ConfiguraVolante(ByVal volante As TipoDeVolante)
Me._Volante = volante
End Sub
Public Sub ConfiguraRines(ByVal rines As TipoDeRines)
Me._Rines = rines
End Sub
Public Sub ConfiguraMotor(ByVal motor As TipoMotor)
Me._Motor = motor
End Sub
Public Sub ConfiguraPotencia(ByVal potencia As Potencia)
Me._Potencia = potencia
End Sub
Public Sub ConfiguraTorque(ByVal torque As Torque)
Me._Torque = torque
End Sub
Public Sub ConfiguraTransmision(ByVal transmision As Transmision)
Me._Transmision = transmision
End Sub
Public Sub ConfiguraSpoiler(ByVal spoiler As Boolean)
Me._Spoiler = spoiler
End Sub
Public Sub ConfiguraUConnect(ByVal uConnect As Boolean)
Me._UConnect = uConnect
End Sub
Public Sub ConfiguraQuemacocos(ByVal quemaCocos As Boolean)
Me._Quemacocos = quemaCocos
End Sub
Public Sub ConfiguraFarosDeNiebla(ByVal farosDeNiebla As Boolean)
Me._FarosDeNiebla = farosDeNiebla
End Sub
End Class
Friend MustInherit Class ConstructorDeDodgeAvenger
Protected Avenger As DodgeAvenger
Public Sub New()
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.Avenger
End Function
Public Sub CreaNuevoAvenger()
Me.Avenger = New DodgeAvenger()
End Sub
Public MustOverride Sub PreparaEstereo()
Public MustOverride Sub PreparaBocinas()
Public MustOverride Sub PreparaVolante()
Public MustOverride Sub PreparaRines()
Public MustOverride Sub PreparaMotor()
Public MustOverride Sub PreparaPotencia()
Public MustOverride Sub PreparaTorque()
Public MustOverride Sub PreparaTransmision()
Public MustOverride Sub PreparaSpoiler()
Public MustOverride Sub PreparaUConnect()
Public MustOverride Sub PreparaQuemacocos()
Public MustOverride Sub PreparaFarosDeNiebla()
End Class
Friend Class Avenger20SEMTX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SEATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATXSport
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(True)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(True)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(True)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(True)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Armadora
Private ConfiguradorAvenger As ConstructorDeDodgeAvenger
Public Sub ConfiguradorDeConstructorDeDodgeAvenger(ByVal Configuracion As ConstructorDeDodgeAvenger)
Me.ConfiguradorAvenger = Configuracion
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.ConfiguradorAvenger.ObtenerAvenger()
End Function
Public Sub ConfigurarAvenger()
Me.ConfiguradorAvenger.CreaNuevoAvenger()
Me.ConfiguradorAvenger.PreparaBocinas()
Me.ConfiguradorAvenger.PreparaEstereo()
Me.ConfiguradorAvenger.PreparaFarosDeNiebla()
Me.ConfiguradorAvenger.PreparaMotor()
Me.ConfiguradorAvenger.PreparaPotencia()
Me.ConfiguradorAvenger.PreparaQuemacocos()
Me.ConfiguradorAvenger.PreparaRines()
Me.ConfiguradorAvenger.PreparaSpoiler()
Me.ConfiguradorAvenger.PreparaTorque()
Me.ConfiguradorAvenger.PreparaTransmision()
Me.ConfiguradorAvenger.PreparaUConnect()
Me.ConfiguradorAvenger.PreparaVolante()
End Sub
End Class
Friend Class Agencia
Public Sub MetodoDeLlamado()
Dim MiAgencia As Armadora = New Armadora()
Dim ConfiguradorAvenger20SEMTX As New Avenger20SEMTX()
Dim ConfiguradorAvenger24SEATX As New Avenger24SEATX()
Dim ConfiguradorAvenger24SXTATX As New Avenger24SXTATX()
Dim ConfiguradorAvenger24SXTATXSport As New Avenger24SXTATXSport()
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport)
MiAgencia.ConfigurarAvenger()
Dim AutoConfigurado As DodgeAvenger = MiAgencia.ObtenerAvenger()
End Sub
End Class
End Namespace

C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Patrones{
public enum NumeroDeBocinas
{
Cuatro = 4,
Seis = 6
}
public enum Potencia
{
_158HP_6400rpm,
_172HP_6000rpm
}
public enum TipoDeEstereo
{
AM_FM_CD_MP3,
AM_FM_CD_MP3_ControlDeAudioEnElVolante
}
public enum TipoDeRines
{
Acero17,
Aluminio17
}
public enum TipoDeVolante
{
Plastico_AjusteInclinacion_AjusteTelescopico,
Piel_AjusteInclinacion_AjusteTelescopico
}
public enum TipoMotor
{
_1998_4cil_16valvulasDOHC,
_2360_4cil_16valvulasDOHC
}
public enum Torque
{
_141Lb_Ft_5000rpm,
_165Lb_Ft_4400rpm
}
public enum Transmision
{
Manual5Velocidades,
Automatica4Velocidades
}
public class DodgeAvenger
{
private string _Acabados = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas";
private bool _AireAcondicionado = true;
private NumeroDeBocinas _Bocinas;
private string _BolsasDeAire = "Conductor y pasajero";
private bool _ControlDeVelocidad = true;
private string _Cristales = "Electricos";
private string _Direccion = "Hidráulica";
private TipoDeEstereo _Estereo;
private bool _FarosDeNiebla;
private string _Frenos = "2 De disco 2 ventilados delanteros";
private bool _InmovilizadorElectronicoMotor = true;
private TipoMotor _Motor;
private Potencia _Potencia;
private bool _Quemacocos;
private string _Retrovisores = "Eléctricos";
private TipoDeRines _Rines;
private string _Seguros = "Eléctricos a control remoto";
private bool _Spoiler;
private Torque _Torque;
private Transmision _Transmision;
private bool _UConnect;
private string _Vestiduras = "Tela";
private TipoDeVolante _Volante;
public void ConfiguraBocinas(NumeroDeBocinas bocinas)
{
this._Bocinas = bocinas;
}
public void ConfiguraEstereo(TipoDeEstereo estereo)
{
this._Estereo = estereo;
}
public void ConfiguraFarosDeNiebla(bool farosDeNiebla)
{
this._FarosDeNiebla = farosDeNiebla;
}
public void ConfiguraMotor(TipoMotor motor)
{
this._Motor = motor;
}
public void ConfiguraPotencia(Potencia potencia)
{
this._Potencia = potencia;
}
public void ConfiguraQuemacocos(bool quemaCocos)
{
this._Quemacocos = quemaCocos;
}
public void ConfiguraRines(TipoDeRines rines)
{
this._Rines = rines;
}
public void ConfiguraSpoiler(bool spoiler)
{
this._Spoiler = spoiler;
}
public void ConfiguraTorque(Torque torque)
{
this._Torque = torque;
}
public void ConfiguraTransmision(Transmision transmision)
{
this._Transmision = transmision;
}
public void ConfiguraUConnect(bool uConnect)
{
this._UConnect = uConnect;
}
public void ConfiguraVolante(TipoDeVolante volante)
{
this._Volante = volante;
}
}
internal abstract class ConstructorDeDodgeAvenger
{
protected DodgeAvenger Avenger;
public void CreaNuevoAvenger()
{
this.Avenger = new DodgeAvenger();
}
public DodgeAvenger ObtenerAvenger()
{
return this.Avenger;
}
public abstract void PreparaBocinas();
public abstract void PreparaEstereo();
public abstract void PreparaFarosDeNiebla();
public abstract void PreparaMotor();
public abstract void PreparaPotencia();
public abstract void PreparaQuemacocos();
public abstract void PreparaRines();
public abstract void PreparaSpoiler();
public abstract void PreparaTorque();
public abstract void PreparaTransmision();
public abstract void PreparaUConnect();
public abstract void PreparaVolante();
}
internal class Avenger20SEMTX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SEATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATXSport : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(true);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(true);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(true);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(true);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Armadora
{
private ConstructorDeDodgeAvenger ConfiguradorAvenger;
public void ConfiguradorDeConstructorDeDodgeAvenger(ConstructorDeDodgeAvenger Configuracion)
{
this.ConfiguradorAvenger = Configuracion;
}
public void ConfigurarAvenger()
{
this.ConfiguradorAvenger.CreaNuevoAvenger();
this.ConfiguradorAvenger.PreparaBocinas();
this.ConfiguradorAvenger.PreparaEstereo();
this.ConfiguradorAvenger.PreparaFarosDeNiebla();
this.ConfiguradorAvenger.PreparaMotor();
this.ConfiguradorAvenger.PreparaPotencia();
this.ConfiguradorAvenger.PreparaQuemacocos();
this.ConfiguradorAvenger.PreparaRines();
this.ConfiguradorAvenger.PreparaSpoiler();
this.ConfiguradorAvenger.PreparaTorque();
this.ConfiguradorAvenger.PreparaTransmision();
this.ConfiguradorAvenger.PreparaUConnect();
this.ConfiguradorAvenger.PreparaVolante();
}
public DodgeAvenger ObtenerAvenger()
{
return this.ConfiguradorAvenger.ObtenerAvenger();
}
}
internal class Agencia
{
public void MetodoDeLlamado()
{
Armadora MiAgencia = new Armadora();
Avenger20SEMTX ConfiguradorAvenger20SEMTX = new Avenger20SEMTX();
Avenger24SEATX ConfiguradorAvenger24SEATX = new Avenger24SEATX();
Avenger24SXTATX ConfiguradorAvenger24SXTATX = new Avenger24SXTATX();
Avenger24SXTATXSport ConfiguradorAvenger24SXTATXSport = new Avenger24SXTATXSport();
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport);
MiAgencia.ConfigurarAvenger();
DodgeAvenger AutoConfigurado = MiAgencia.ObtenerAvenger();
}
}
}

Usos conocidos

Ejemplos de usos conocidos son por ejemplo un parser (Director) que tome un constructor como parámetro, genere la notificación al constructor cada que reconozca una construcción válida y rerese el resultado al cliente; generar un constructor que sea producto y director al mismo tiempo y que pueda construír a partir de sus propios cambios de parámetros.

Patrones relacionados

Fabrica abstracta, Combinación

Etiquetas: , , , , ,

Patrones y antipatrones de arquitectura: Constructor

Escrito por Alfonso Lara Ramos @ 17:47 0 comentarios

Busca Patrones y antipatrones de arquitectura: Constructor en Technorati | Guarda Patrones y antipatrones de arquitectura: Constructor en Yahoo | Guarda Patrones y antipatrones de arquitectura: Constructor en Google Bookmarks | Envía Patrones y antipatrones de arquitectura: Constructor a Furl | Envía Patrones y antipatrones de arquitectura: Constructor a Newsvine | Guarda Patrones y antipatrones de arquitectura: Constructor en Ma.gnolia.com | Envía Patrones y antipatrones de arquitectura: Constructor a Reddit | Envía Patrones y antipatrones de arquitectura: Constructor a BarraPunto | Envía Patrones y antipatrones de arquitectura: Constructor a Digg | Envía un Meme sobre Patrones y antipatrones de arquitectura: Constructor | Guarda Patrones y antipatrones de arquitectura: Constructor en del.icio.us | Envía Patrones y antipatrones de arquitectura: Constructor a Fresqui | Menea Patrones y antipatrones de arquitectura: Constructor en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070607

SQL Server 2008 Code Name: Katmai June CTP

SQL Server 2008 Code Name: Katmai June CTP

SQL Server 2008 tiene mejoras en cuanto a la seguridad, confiabilidad, manejabilidad y escalabilidad con respecto a sus antecesores, una de las características anunciadas por Microsoft en esta nueva edición incluyen el que se puedan consumir datos de cualquier tipo en cualquier dispositivo.

Esto se logra permitiendo el almacenamiento en la base de datos de cualquier tipo de información imaginable, desde XML (que ya habíamos visto en SQL 2005) hasta documentos de cualquier formato.

Brinda capacidades de Inteligencia de negocio nuevas que son más fáciles de utilizar para cualquier usuario ya que se integra con Microsoft Office, permitiendo de esta manera crear tanto reportes internos para las organizaciones como también para los clientes su publicación externa.

En cuanto al desarrollo continúa su integración con Visual Studio (al estilo de "Orcas" por supuesto), esta vez con las nuevas especificaciones de C# y VB a partir de LINQ puede ser que se integre totalmente haciendo uso de tipos de objetos tales como el nuevo "Base de datos".

Los servicios de publicación y suscripción se han simplificado de manera notable.

El CTP de junio de SQL 2008 se encuentra ya disponible en el sitio Web de Connect.

En el sitio Web oficial de SQL 2008 pueden encontrar ya información interesante sobre esta nueva versión, además les dejo la liga para el Whitepaper de SQL Server 2008 y el comunicado de prensa que lo anunció. Yo ya estoy probando la versión de 64 bits para desarrolladores y me parece interesante la facilidad de uso de la nueva interface y ya les contaré de las nuevas herramientas.

Etiquetas: , , , , ,

SQL Server 2008 Code Name: Katmai June CTP

Escrito por Alfonso Lara Ramos @ 23:54 0 comentarios

Busca SQL Server 2008 Code Name: Katmai June CTP en Technorati | Guarda SQL Server 2008 Code Name: Katmai June CTP en Yahoo | Guarda SQL Server 2008 Code Name: Katmai June CTP en Google Bookmarks | Envía SQL Server 2008 Code Name: Katmai June CTP a Furl | Envía SQL Server 2008 Code Name: Katmai June CTP a Newsvine | Guarda SQL Server 2008 Code Name: Katmai June CTP en Ma.gnolia.com | Envía SQL Server 2008 Code Name: Katmai June CTP a Reddit | Envía SQL Server 2008 Code Name: Katmai June CTP a BarraPunto | Envía SQL Server 2008 Code Name: Katmai June CTP a Digg | Envía un Meme sobre SQL Server 2008 Code Name: Katmai June CTP | Guarda SQL Server 2008 Code Name: Katmai June CTP en del.icio.us | Envía SQL Server 2008 Code Name: Katmai June CTP a Fresqui | Menea SQL Server 2008 Code Name: Katmai June CTP en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070527

Los 10 errores de seguridad más comunes en ASP .NET

A continuación les enumeraré los 10 errores más comunes que se cometen cuando desplegamos una aplicación ASP.NET, les explico la razón por la que esos errores pueden ser peligrosos y les indico la manera más adecuada de corregirlos. Espero que les sea de utilidad:

  1. Custom Errors deshabilitado. En el archivo Web.config de nuestras aplicaciones ASP.NET la etiqueta custom Errors se encuentra comentada por defecto cuando creamos una nueva aplicación, esto deja el valor RemoteOnly por defecto. Sin embargo muchas veces cuando estamos probando el software en un servidor remoto hay ocasiones en las que por comodidad dejamos el valor en Off, esto permite a todos los usuarios que ingresan a las páginas de la aplicación enterarse de los errores que suceden en la aplicación, al momento de depurar. Sin embargo esto no es bueno al momento de desplegar, puesto que cualquiera puede también ver pedazos de código cuando hay alguna falla. Lo más adecuado es prender la opción, lo cual puedes aprovechar para mostrar errores más amigables al usuario, esto incluso te sirve para optimizar para buscadores ;-). Un ejemplo de cómo prender esta opción es el siguiente:
    <customErrors mode="On">
    <error statusCode="404" redirect="default.aspx" />

    </customErrors>
  2. Dejar habilitado el seguimiento de la página. El seguimiento de página (tracing) normalmente se encuentra apagado, sin embargo también por cuestiones de depuración puede encenderse, la forma más sencilla es hacerlo en el archivo que estemos trabaando utilizando la etiqueta Trace en la declaración de página del formulario en el que estamos trabajando, sin embargo una buena práctica es hacerlo de modo sólo local (por si necesitamos que el seguimiento esté de todos modos encendido) desde el archivo Web.config y luego apagarlo al desplegar, hacerlo de esta manera encenderá el seguimiento en todos los formularios del proyecto y evitará que se nos olvide apagarlo, lo haces con la etiqueta trace de la siguiente manera:
    <trace enabled="true" traceMode="SortByTime" localOnly="true" />
  3. Depuración habilitada. Tener esta opción habilitada, afecta al rendimiento de la aplicación, muestra errores más detallados y sólo debe encenderse mientras estamos desarrollando precisamente para el proceso de depuración, la forma correcta de desplegar es dejando en el archivo Web.config la opción de depuración apagada, otra buena práctica en el caso de las aplicaciones ASP.NET creadas con Visual Basic es dejar las opciones explicit y strict encendidas, de este modo hacemos código mejor construído (léase 100 veces: no garantiza que perfectamente construído, pero ayuda). La forma de configurar esto es de la siguiente manera:
    <compilation debug="true" strict="true" explicit="true"/>
  4. Cookies suplantables. Los hackers pueden realizar ataques de XSS (Cross Site Scripting) cuando las cookies son accesibles del lado del cliente, intentan este tipo de ataques cuando se encuentran por ejemplo con saludos del tipo Hola ChicoDotNet en las páginas en la que se inicia sesión agregando su propio código del lado del cliente. Esto puedes dificultarlo fácilmente -valga la redundancia- cuando enciendes las cookies HttpOnly, esto se hace de la siguiente forma:
    <httpCookies httpOnlyCookies="true" />
  5. Sesión sin cookies. Para hacer disponible una aplicación a los clientes que no aceptan cookies se tiene la opción de colocar la sesión en la URL, muchos las utilizan por defecto para no complicarse asignando a la etiqueta sessionState el atributo cookieless con el valor UseUri, sin embargo esto abre la posibilidad de suplantar a un usuario determinado visitando la dirección que contiene la sesión, esto puedes evitarlo almacenando la sesión en una cookie que expire pronto, pero queda el problema de los clientes que no aceptan cookies, para ellos necesitas enviar la sesión en la URL, ¿Cómo resolver eso?, enciende la autodetección, eso hará que los clientes que las acepten las usen y los que no las reciban en la URL, se hace con el siguiente código en Web.config:
    <sessionState cookieless="AutoDetect" />
  6. No emitir cookies seguras. Las cookies seguras se emiten utilizando SSL, esto hace que la transmisión se realice en forma encriptada, para configurar SSL en IIS puedes ver el artículo en MSDN que te indica como hacerlo en IIS 6.0, en el caso de IIS 7.0 es mucho más sencillo como ya había mencionado anteriormente. Para la configuración de la transmisión de las cookies por medio de SSL utiliza el siguiente código:
    <authentication mode="Forms">
    <forms requireSSL="true" />
    </authentication>
  7. Sesiones alargables. Para alargar el tiempo de expiración de una sesión se utiliza el atributo slidingExpiration de la etiqueta forms, esto da mayor tiempo a los hackers para suplantar a un usuario determinado, la recomendación es dejarlo como se indica a continuación:
    <forms slidingExpiration="true" />
    .
  8. Uso de cookies de autenticación por defecto. El nombre por defecto de una cookie de autenticación es .ASPXAUTH, una buena práctica es nombrar estas de manera distinta, por ejemplo utilizando un GUID, de esta manera evitamos que alguien que se firme en una aplicación del servidor y pueda modificar la cookie para firmarse en otra utilizando la primera cookie obtenida. Este valor se pondría en el lugar que indico a continuación:
    <authentication mode="Forms">
    <forms name="{80aae8ec-cee2-46bc-ba57-eb89cd3db488}" requireSSL="true" />
    </authentication>
  9. Paso de variables por URL. El uso de Request.Querystring("variable") para operaciones de negocios debe ser evitado, sobre todo si se trata de información sensible, se debe preferir el uso de variables de sesión o de ViewState, de otro modo cualqueir persona con algo de conocimientos de programación podría hacer ataques de XSS o de SQL injection.
  10. Credenciales o cadenas de conexión en Web.config. Esto es lo más común de la lista, debe evitarse a toda costa el guardar usuarios y contraseñas en etiquetas credentials y cadenas de conexión o configuraciones de aplicación en Web.config sin antes cifrarlas adecuadamente. O. K., IIS evita la descarga de estos archivos de forma remota, pero ¿Qué me dicen de los del hosting? Hay que tener mucho cuidado con esto.

Etiquetas: , , , , , , , ,

Escrito por Alfonso Lara Ramos @ 06:25 0 comentarios

Busca Los 10 errores de seguridad más comunes en ASP .NET en Technorati | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Yahoo | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Google Bookmarks | Envía Los 10 errores de seguridad más comunes en ASP .NET a Furl | Envía Los 10 errores de seguridad más comunes en ASP .NET a Newsvine | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Ma.gnolia.com | Envía Los 10 errores de seguridad más comunes en ASP .NET a Reddit | Envía Los 10 errores de seguridad más comunes en ASP .NET a BarraPunto | Envía Los 10 errores de seguridad más comunes en ASP .NET a Digg | Envía un Meme sobre Los 10 errores de seguridad más comunes en ASP .NET | Guarda Los 10 errores de seguridad más comunes en ASP .NET en del.icio.us | Envía Los 10 errores de seguridad más comunes en ASP .NET a Fresqui | Menea Los 10 errores de seguridad más comunes en ASP .NET en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070524

Patrones y antipatrones de arquitectura: Singleton

En esta ocasión iniciaré una serie de artículos acerca de patrones y antipatrones de arquitectura. Espero que les sea útil. Ejemplificaré utilizando VB.NET y C# en cada uno de los patrones.

Tipo de patrón

Creador de objetos

Objetivo

Asegura que una clase determinada únicamente tenga una instancia y da acceso global a ella.

Motivación

Es importante en muchos casos que una clase tenga una instancia única, esto por ejemplo aplica a manejadores de ventanas, sistemas de archivos y de manera más sencilla clases que tienen propiedades y métodos que se utilizan durante todas las actividades de un sistema una y otra vez llamadas desde muchas otras instancias, por ejemplo un proveedor de acceso a datos. Un mecanismo adecuado para lograr esto es que la clase por si misma se construya, se exponga globalmente a todo el ensamblado y evite que otras clases la puedan construir nuevamente.

Aplicación

Debe usarse el patrón Singleton cuando deba haber una sola instancia de una clase y esta pueda ser accedida desde un punto conocido por sus clientes y cuando esta instancia deba ser extendida por sub clases sin modificar su programación.

Estructura

Patrón singleton en VB .NET

Patrón singleton en C#

Participantes

Singleton

Colaboración

Los clientes accesan al singleton solamente a partir de su operación

Consecuencias

Los beneficios del uso del patrón Singleton son los siguientes:

  • Acceso controlado a una sola instancia
  • Espacio de nombres reducido
  • Permite extender la funcionalidad por medio de sub clases
  • Permite usar un numero variable de instancias solo cambiando la operación que concede acceso a la clase Singleton
  • Es más flexible que exponer operaciones estáticas de clase

Implementación

Un ejemplo de implementación puede ser un proveedor de acceso a datos multi-base de datos, este se extiende por medio de la implementación de interfases para incluir nuevas sub clases que acepten nuevos proveedores en el caso de nuevas versiones o cambios de plataformas, la lógica de negocio siempre trabajará con la instancia Singleton Datos y toda la operación nueva o modificada se podrá implementar fácilmente sin modificar el resto de la programación, además de encolar los procesos transaccionales.

Código de ejemplo

VB.NET

Imports System.Runtime.CompilerServices
Public Class Singleton
Private Shared _Instancia As Singleton
<MethodImpl(MethodImplOptions.Synchronized)>_
Private Sub New()
If _Instancia Is Nothing Then
_Instancia = New Singleton()
End If
End Sub
Public Shared ReadOnly Property Instancia() As Singleton
Get
Return _Instancia
End Get
End Property
End Class

C#

using System.Runtime.CompilerServices;
public class Singleton {
private static Singleton _Instancia;
[MethodImpl(MethodImplOptions.Synchronized)]
private Singleton() {
if (_Instancia == null){
_Instancia = new Singleton();
}
}
public static Singleton Instancia {
get {
return _Instancia;
}
}
}

Usos conocidos

Un ejemplo de usos conocidos es la relación entre las clases y sus respectivas metaclases y las interfases únicas en los patrones de fábrica abstracta, constructor y prototipo.

Patrones relacionados

Fabrica abstracta, Constructor, Prototipo

Etiquetas: , , , , ,

Escrito por Alfonso Lara Ramos @ 18:03 0 comentarios

Busca Patrones y antipatrones de arquitectura: Singleton en Technorati | Guarda Patrones y antipatrones de arquitectura: Singleton en Yahoo | Guarda Patrones y antipatrones de arquitectura: Singleton en Google Bookmarks | Envía Patrones y antipatrones de arquitectura: Singleton a Furl | Envía Patrones y antipatrones de arquitectura: Singleton a Newsvine | Guarda Patrones y antipatrones de arquitectura: Singleton en Ma.gnolia.com | Envía Patrones y antipatrones de arquitectura: Singleton a Reddit | Envía Patrones y antipatrones de arquitectura: Singleton a BarraPunto | Envía Patrones y antipatrones de arquitectura: Singleton a Digg | Envía un Meme sobre Patrones y antipatrones de arquitectura: Singleton | Guarda Patrones y antipatrones de arquitectura: Singleton en del.icio.us | Envía Patrones y antipatrones de arquitectura: Singleton a Fresqui | Menea Patrones y antipatrones de arquitectura: Singleton en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070518

Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0

La certificación Microsoft Certified Technology Specialist: .NET Framework 2.0 Web Applications (MCTS: .NET Framework 2.0 Web Applications) indica conocimientos y habilidades en desarrollo de aplicaciones Web y acceso a datos en aplicaciones Web.

Este tipo de certificación es la indicada si eres un desarrollador Web.

Los requisitos son dos exámenes, el 70–536: TS: Microsoft .NET Framework 2.0 - Application Development Foundation y el 70–528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development

Para pasar estos exámenes te recomiendo investigar y practicar los siguientes tópicos:

  • Uso de tipos de sistema
  • Uso de colecciones
  • Uso de generics
  • Validación de entradas
  • Manejo de cadenas de texto
  • Extracción de datos con expresiones regulares
  • Desarrollo de servicios, dominios de aplicaciones y aplicaciones multihilo
  • Agregado de imágenes y gráficos a las aplicaciones
  • Implementación de seguridad de acceso al código
  • Implementación de seguridad basada en roles
  • Encripción de datos
  • Uso de técnicas de reflexión
  • Uso de técnicas de serialización
  • Trazado de aplicaciones
  • Interacción con código legado usando COM Interop y PInvoke
  • Configuración de aplicaciones Web
  • Despliegue de aplicaciones Web
  • Uso de ADO .NET
  • Uso de XML
  • Uso de controles llenados por datos
  • Implementación de forms authentication
  • Implementación de impersonación
  • Implementación de controles de login
  • Configuración de controles de servidor
  • Creación de custom Web controls
  • Uso de temas
  • Uso de Web Parts
  • Uso de perfiles de usuario
  • Manejo del estado de la aplicación

Los libros que te recomiendo leer son los siguientes:

Etiquetas: , , , , , , ,

Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0

Escrito por Alfonso Lara Ramos @ 09:30 0 comentarios

Busca Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 en Technorati | Guarda Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 en Yahoo | Guarda Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 en Google Bookmarks | Envía Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 a Furl | Envía Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 a Newsvine | Guarda Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 en Ma.gnolia.com | Envía Certificación Microsoft para desarrolladores: Requisitos para especialista en Aplicaciones Web .NET 2.0 a Reddit |