Mostrando las entradas con la etiqueta Programación en General. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación en General. Mostrar todas las entradas

miércoles, julio 19, 2006

DataEventArgs

Despues de publicar mi post anterior, me di cuenta de que la clase DataEventArgs<T> no forma parte del .NET Framwork. Nosotros usamos Mobile CAB y resulta que la clase pertenece a este framework. Muy seguramente el CAB para Windows tambien lo use, pero bueno si ustedes estan programando para Web o simplemente no usan CAB, pueden usar la siguiente clase en su proyecto. Es tan sencillo el código que toma lo mismo hacerla que haber hecho algún otro EventArgs.

using System;

namespace Microsoft.Practices.Mobile.CompositeUI.Utility

{

/// <summary>

/// Generic arguments class to pass to event handlers that need to receive data.

/// </summary>

/// <typeparam name="TData">The type of data to pass.</typeparam>

public class DataEventArgs<TData> : EventArgs

{

TData data;

/// <summary>

/// Initializes the DataEventArgs class.

/// </summary>

/// <param name="data">Information related to the event.</param>

/// <exception cref="ArgumentNullException">The data is null.</exception>

public DataEventArgs(TData data)

{

if (data == null)

{

throw new ArgumentNullException("data");

}

this.data = data;

}

/// <summary>

/// Gets the information related to the event.

/// </summary>

public TData Data

{

get { return data; }

}

/// <summary>

/// Provides a string representation of the argument data.

/// </summary>

public override string ToString()

{

return data.ToString();

}

}

}

martes, julio 18, 2006

Software Guru 2006

20,21 y 22 de Septiembre en el WTC y CompuSoluciones.

Si ya vieron la ultima revista de SG, es de llamar la atención que no este Microsoft en la primera de forros (luego luego dandole vuelta a la portada), así que para que hayan quitado a Microsoft uno de sus más fuertes patrocinadores para anunciar este evento es porque realmente ha de valer la pena jejeje, bueno igual MileStone Consulting le quito la contraportada a IBM, mmmm ha de ser algo importante tambien....

Bueno ya en serio, realmente si es un evento importante, basta con ver algunos de los temas. La verdad es que parecen ser tan prometedores todos que no me gusta tener que decidir cual track tomar.

Lamentablemente me ha tocado jugar un poco de cada rol, por lo que tengo ahora me interesa todo lo relacionado con mejora de procesos, pero tambien estoy muy al tanto de herramientas y tecnologías y bueno, ingeniería de software siempre será algo indispensable, pero por otro lado estrategías para empresarios presenta temas que pueden ser muy útiles para Integradores. Ya viendo todo, tal vez dirección de TI es el único no tan tan interesante, aunque pensandolo bien ahí hay muchos clientes potenciales y necesitamos saber como piensan los directores de TI, por ejemplo hay un tema "Outsourcce exitoso: Mejores prácticas y leccciones aprendidas", apoco no sería interesante al ofrecer servicios de este tipo conocer eso para tener más herramientas de venta con el cliente.

Bueno en resumen lo malo de SG06 es tener que escoger a que track entrar.

Estos son algunos de mis temas preferidos:
Herramientas y Tecnología
Windows Presentation Foundation (que parece que la va a dar Christian).
Software Orientado a Aspectos.
Desarrollo para Dispositivos Inteligentes, :( era la propuesta de tema que iba a mandar yo.
Mejora de Procesos:
Entendiendo la Arquitectura de MoProSoft para extenderlo.
MoProSoft 16 veces: leccciones aprendidas.
CMMI y/o/vs Agilidad.
Direccion de Proyectos:
Administración ágil de proyectos. (Se empalma con WPF).
Ingeniería de Software:
Especificación de Requerimientos con PNL. (Se empalma con AOP)
Desarrollo Dirigido por pruebas TDD. (Se empalma con Desarrollo para dispositivos inteligentes).
Estrategia para Empresarios:
Todas.
Dirección de TI:
Outsourcing Existoso

Bueno esos solo son los tracks.
Chequen las conferencias magistrales.
Business Collaboration Software Factories, Mauro Regio y quien es Mauro Regio, por alguna razón no le pusieron su foto como a los demás expositores ni su pérfil, pero vamos Software Factories? A quien van a mandar para hablarnos de eso? Bueno busque el pérfil de Mauro y resulta que mandaron al indicado para venir a hablar de este tema. Creo que está puede ser la mejor platica para mi gusto.
Ajax + SOA, John Crupi, de JackBee si alguien sabe de AJAX es la gente de JackBee.
Software Develpment as a cooperative game, Alistair Cockburn.
Tendencias Internacionales en Ingeniería de Software, el tema pudiera parecer no tan interesante, pero es Hanna Oktaba.

El último día hay unos talleres. Estos son los que me llemaron la atención
Desarrollo Empresarial con VSTS, llevamos trabajando casi un año con VSTS, pero siempre hay algo que podamos aprender.
Arquitecturas basadas en componentes con .NET Library 2.0.


Bueno, espero y también les llame la atención algo de esto, aunque seguramente no tendremos el mismo gusto, mejor les sugiero que vean al programa completo y escojan a que quieren entrar.

lunes, julio 17, 2006

Net Framework 3

Al parecer ya está esto más listo, al menos a un nivel tan estable como para empezar a hacer nuestros primeros pininos en está nueva tecnología...

Esperamos que en próximos proyectos podamos empezar a usar algo de esto.

Pueden ver más info de lo que se incluye en un post de Christian Strevel.

miércoles, julio 12, 2006

Más de delegados anónimos

Hoy necesitabamos tener toda una lista de partidas que están dentro de una compra.
Una compra es una lista de pedidos y un pedido es un diccionario de partidas, así que como sacarlo de manera sencilla.


public List Partidas
{
get
{
List partidas = new List();
ForEach(delegate(Pedido pedido) { partidas.AddRange(pedido); });
return partidas;
}
}

No sólo esto simplifico nuestro código, sino que lo hizo más seguro, encapsulando variables que no necesitaban ser de instancia.
Había otras soluciones, pero la más obvia era hacer algo como lo siguiente

List partidas; // Ahora es variable de instancia para que el delegate lo pueda usar.
public List Partidas
{
get
{
partidas = new List();
ForEach(new Action(AddPartidas)); // Ahora usamos un metodo como delegado
return partidas;
}
}

public void AddPartidas(Pedido pedido)
{
partidas.AddRange(pedido);
}

No solo el código es más largo, creamos un metodo extra muy sencillo que sólo se usa desde un lugar, sino que aparte y lo peor de todo, es que ahora cualquier metodo o propiedad de la clase puede usar la variable partidas, pensando que sirve para algo más que para regresarla a algún cliente de este objeto desde la propiedad Partidas.

viernes, julio 07, 2006

Probar un WebService desde una maquina remota.

Encontre un post muy breve e interesante respecto a como hacer esto.

Cuando entras a un WebService de IIS o del WebServer de VS te aparecen campos para que puedas pasarle parametros a los WSs sencillos para invocarlos y probarlos directamente desde web. Bueno está funcionalidad está deshabilitada cuando necesitas hacer las pruebas de manera remota.

Para arreglarlo simplemente escribe los siguiente en el web.config dentro de system.web

<system.web>
    <webservices> 
        <protocols>   
            <add name="HttpPost">   
            <add name="HttpGet"> 
        </protocols>
    </webservices>
</SYSTEM.WEB>

jueves, julio 06, 2006

Anonymous Delegates

VS 2005 viene con 400 nuevas caracteristicas, según nos presume Microsoft. Esto es para el puro IDE, aparte de los cambios en la arquitectura del framework y sus nuevas clases

Bueno entre algunas de las mejores novedades hemos encontrado obviamente Team System, todo lo relacionado con pruebas, diagramas de clases, intellisense en la ventana del Watch del depurador, code snippets.

El framework trae un monton de novedades como generics, del que ya he escrito anteriormente (DataAccess), bueno el chiste es que aunque ya la conocíamos nunca nos había parecido util el usar delegados anónimos y hoy descubrimos lo simple y prácico que es no tener que hacer todo un metódo que estorba en tu código que contiene una línea sencilla y sólo se manda llamar desde un lugar.

Por ejemplo tenemos una lista de Threads que queremos poner a todos a correr y luego esperar a que todos terminen.

threads.ForEach(delegate(Thread thread) { thread.Start(); });
threads.ForEach(delegate(Thread thread) { thread.Join(); });

Wow!!!! antes hubieramos necesita crear dos metodos aparte nada más para hacer un thread.Start y un thread.Join para el predicate del foreach de la lista.

Bueno espero y les sea útil.

A nosotros nos hubiera ayudado mucho si se nos hubiera ocurrido usar esto para unos controles EditableGrids y EditableList que usamos para pocket pcs, que usan intensamente delegados y en la mayoría de los casos hacen cosas tan sencillas como asiganarle un valor a un textbox o realizar alguna validación sencilla.

lunes, mayo 01, 2006

public abstract class DataAccess


Los Genercis son una funcionalidad nueva de .NET 2005 y por ahí trae algo similar Java en su nueva versión (no sé si ya lo hayan liberado).

Para los que han programado en C++ es algo similar a las clases parametrizadas o las TemplateCollections, no recuerdo bien como llamaban, pero seguramente recuerdan algo como:

List<Albums> list = new List<Albums>(); // Tipico de ejemplos en C++

Bueno en C# es muy similar la sintaxis y ahora estamos explotando mucho eso.

Cuando alguien piensa en generics, se le viene a la mente Collecciones.

Antes haríamos algo como:

AlbumCollection : ICollection

{

// Aquí teníamos un montón de métodos para implementar ICollection (bueno no son tantos), pero era puro código repetitivo.

}

Lo enfadoso de esto es que seguramente íbamos a necesitar más de una colección con tipo, probablemente más de 10 o 30 y no sólo para nuestros BusinessEntities. Este tipo de colecciones aún se usan y pueden verlo cuando escriban datagrid1.Rows. Ahora podríamos simplemente decir.

List<Album> list = new List<Album>();

Mmm se parece a C++?

Ok, ok, las colecciones son la parte sencilla seguramente quieren ver algo más interesante. Bueno el nuevo generis EventHandler es un buen ejemplo. Para los que han tenido que crear eventos específicos y para poder cumplir con los guidelines de Microsoft, necesitamos algo como:

public class prueba

{

Prueba()

{

// Do something cool

}

public event DelegadoEspecifico evento;

}

Por lo que necesitaban crear un delegado específico:

public delegate void DelegadoEspecifico(object o, AlgoHeredandoDeEventArgs e);

Y necesitaban tener su clase AlgoHeredandoDeEventArgs

public class AlgoHeredandoDeEventArgs : EventArgs

{

AlgoHeredandoDeEventArgs(string x, string y)

{

// Do something cooler

}

// Write some useful properties here.

}

Ok, ok, es algo sencillo, pero se puede hacer más simple sin la necesidad de tener un montón de delegados.

Digamos que necesitas otro evento, pero que ahora reciba otros EventArgs distintos, porque, porque es lo único que cambia, así que ahora es:

public event DelegadoEspecifico2 evento;

y crear otra clase public class AlgoHeredandoDeEventArgs : EventArgs {}

Bueno luego usarla: public event DelegadoEspecifico2 evento2;

Bueno los genéricos nos permiten crear delegados específicos:

public event EventHandler<AlgoHeredandoDeEventArgs> evento;

public event EventHandler<AlgoHeredandoDeEventArgs2> evento;

Realmente lo único que nos ahorramos es la declaración de los delegados, pero ya es algo.

No es el único uso. Object Builder utiliza una de las formas más interesantes de aplicar Generics. Es muy complejo para describirlo aquí, pero la parte simple la pueden ver en Enterprise Library and Object Builder.

Recientemente hemos trabajando en un DataAccessLayer/DataMappingLayer (ver Table Data GateWay y Fowler’s EAA patterns) para Windows Mobile 5.0 y el uso de generics combinado con la herencia y polimorfismo fácilitaron enormemente las cosas. De manera resumida está es la arquitectura:

(Ver diagrama).

Tenemos nuestra clase base (abstracta) DataAccess, que implemente la interfaz principal IDataAccess (en caso de que necesitemos cambiar la implementación, por ejemplo para usar otra base de datos)

Todo se vuelve bastante sencillo con Generics. Usando template methods podemos ir encapsulando la funcionalidad genérica en las tablas de más arriba en la cadena de herencia, por ejemplo DataAccess es el único lugar donde se construyen los querys para la base de datos y se ejecutan los Comandos, etc. Aparte como lo tenemos todo bien encapsulado podemos destinar más tiempo a optimizar esa parte y hacerlo muy bien una sola vez. Realmente nadie quiere escribir el mismo código muchas veces (Abrir conección, execute reader, etc). Como en este caso muchas de las tablas usan Clave y descripción del mismo tipo, tenemos una segunda Clase Abstracta que se encarga de establer dichos valores y delegar el trabajo a un nuevo Template Method (el Donet en las clases concretas). De está forma cada DataAccess como VendedoresDataAccess y Lineas DataAccess son las únicas que conocen el nombre u orden de las columnas en la base de datos y saben como establecer las propiedades al Business Entitie que queremos crear.

Claro, está sólo una forma muy simple de hacer el Mapeo de Relacional a Objetos. Es algo similar a como lo explica Martin Fowler en su libro Patterns of Enterprise Applications Architecture la diferencia es que en la implementación de Fowler los metodos regresaban clases Padres, por ejemplo una clase del tipo DomainObject en lugar de una clase del tipo Persona.

Este es el código de Fowler (Java):

Class AbstractMapper{

Protected DomainObject GetDomainObject(ResultSet rs, long id){

// Do common stuff

DomainObject result = doLoad(id,rs);

// Do some other common stuff

return result;

}

}

abstract protected DomainObject doLoad(Long id, ResultSet rs);

class PersonMapper:AbstractMapper

{

protected DomainObject doLoad(Long id, ResultSet rs){

String lastNameArg = rs.getString(2);

// get other properties

return new Person(id,lastNameArg,etc);

}

}

Los usuarios de esas clases tendrán que hacer algo como:

Person p = (Person)personMapper.GetDomainObject(1);

Los dos graves problemas son:

  1. Corremos el riesgo de equivocarnos de tipo de objeto y detectarlo hasta el tiempo de ejecución en lugar de en tiempo de compilación.
  2. Es ineficiente estar haciendo tanto boxing (cuando regreso el objeto person como DomainObject) y unboxing (cuando hacemos el cast de DomainObject a Person).

Aparte algún error en el tipo de datos podría venir desde PersonMapper no sólo por el cliente.

En código (C#) y usando generics se puede hacer algo como lo siguiente:

Class AbstractMapper<TBO>

where TBO: DomainObject,new()

{

Protected TBO GetDomainObject(ResultSet rs, long id){

// Do common stuff

TBO result = doLoad(id,rs);

// Do some other common stuff

return result;

}

abstract protected TBO doLoad(Long id, ResultSet rs);

}

class PersonMapper: AbstractMapper<Person>

protected Person doLoad(Long id, ResultSet rs){

String lastNameArg = rs.getString(2);

// get other properties

return new Person(id,lastNameArg,etc);

}

Y ahora los clientes pueden usarlo de la siguiente forma:

Person p = personMapper.GetDomainObject(1);

No es necesario el cast ni el boxing, ya que siempre la clase AbstracMapper estará trabajando con el tipo de Objecto concreto en lugar de con DomainObject. Por otro lado el template method de PersonMapper (doLoad) para implementar la clase abstracta necesita forzosamente regresar un objeto del tipo Person.

Algo similar aplica también con Interfaces e inclusive es mucho muy útil ya que podemos tener ciertas Interfaces Genéricas y después implementarlas desde Interfaces específicas y obligar a las clases que deseen implementar a estás últimas a que cumplan con todos los metodos.

interface IGenericMapper<TBO>{

TBO Get();

}

interface IPersonMapper:IGenericMapper<Person>{}

public class PersonMapper:IPersonMapper{

// Must implement:

Person Get(){

// Do something

}

}

Claro que ahora como parte del framework que tenemos, ya está funcionalidad quedará en el DataAccessGenérico y será suficiente con que PersonMapper tenga lo siguiente:

public class PersonMapper:DataAcccess<Person>,IPersonMapper{

// Person Get() //Ya está implementada para la clase abstracta DataAccess.

// Ahora solo debemos implementer el metodo abstracto

protected Person DoFill(Person p, reader r)

{

p.Name = r[“Name”].ToString();

return p;

}

}

Pudiera parecer medio inutil el tener la interfaz IPersonMapper, pero es que en está queremos ahora dar de alta ciertos métodos específicos como GetByName, GetByLastName(string lastName), etc.

jueves, marzo 30, 2006

ASP.NET PreCompilation

Prometo que este post será breve.
Abran VS 2005 Command Prompt y escriban lo siguiente:
aspnet_compiler -?

Voila ahí tienen todo lo que necesitan para poder pre-compilar todo su sitio web y te empaqueta todo: assemblies, archivos estátios y archivos de configuración.

Muy útil si quieres hacer el deployment en algún servidor donde quieras proteger tu código.

miércoles, marzo 29, 2006

Made in Express


Microsoft lanza un concurso para programadores, especialmente enfocado a estudiantes. Hay buenos premios y todo lo que se necesita para arrancar el concurso es tener una buena idea y comprometerse a hacerla en express (son versiones light de Vistual Studio y SQL). MS seleccionara las 12 mejores ideas y estos 12 programadores se pondrán a desarrollarla y que gane el mejor.

Al que le interese participar y tener la oportunidad de ganar $10,000 dlls le sugiero y visite la página www.madeinexpress.com suban su idea y suerte!

jueves, marzo 23, 2006

Web Services Enhancements 3.0 (Wizzy)

WSE 3.0

WSE 3.0 es un tema interesante y muy importante que he tenido que estar investigando más a fondo en los últimos meses. Si se están desarrollando Servicios Web que no necesitan seguridad en absoluto y no importa estar expuestos a riesgos como comprometer la información transmitida, DoS (Denial of Service), entonces crear un proyecto de ASP.NET Web Services en Visual Studio es todo lo que necesitará. La verdad es que no se me ocurre un escenario así, pero, mmmm, bueno ok es sarcasmo, nunca deberán exponer sus Web Services de está forma.

No todo es malo cuando se refiere a ASP.NET Web Services sin utilizar WSE (cualquier versión). Hay dos tipos de seguridad:
Transport Level Security: esto se puede resumir en SSL, si todo lo que se necesita es proteger el canal de comunicación SSL puede ser suficiente, inclusive sitios grandes como Amazon es todo lo que usan, pero pudiera no cumplir con ciertos requerimientos como Addressing and Routing que mencionaremos más adelante.
Message Level Security: esto es lo que veremos más a fondo con WSE y es lo que Windows Communication Foundation o Indigo pretenden mejorar.

WSE o Web Services Enhancements es un mini framework desarrollado por Microsoft para complementar el .NET Framework y pretende ayudar a ser compatible con el WS-I Basic Profile.

¿Qué es WS-I Basic Profile?

Oasis entre todos los estándares que ha definido, creo unos para WS conocidos tambien como Web Services Specifications, estos pretenden lograr la interoperabilidad e incluyen en un gran rango de áreas como protocolos de transporte y seguridad, estos están agrupados como WS-I Basic Profile. Los siguientes son algunos de las especificaciones que forman parte de WS-I.

WS-Security: hablaremos más a fondo de este más adelante, pero incluye alternativas de seguridad como certificados X.509, digital signing, encryption, etc.
WS-Policy: para poder especificar en un documento los requerimientos de un servicio.
WS-Addressing: es para saber con quien se están comunicando y mantener estás direcciones actualizadas.
WS-Messaging: soporta diferentes protocolos de comunicación como TCP y ayuda para comunicación Asíncrona.
WS-Secure Conversation: para establecer session usando tokens de seguridad.
WS-Reliable Messaing: para asegurarnos que el mensaje llegue y se entienda y si llega más de una vez que no se pele.

Regresando a WSE

Hasta que escuche ArcCast en Channel 9, bueno más bien dicho 5 capítulos de ArcCast que hablan sobre seguridad en los WS. Escuche que lo pronuncian como Wizzy y no DóbleIu-Es-I como yo pensaba.

Cuando se refiere a seguridad se tienen muchas opciones, obviamente unas mejores que otras.
Como ya vimos existe la posibilidad de usar SSL sin preocuparnos mucho por el diseño de nuestra aplicación o programación, pues finalmente el IIS y el cliente se encargarán de negociar el intercambio de llaves y algoritmos de cifrado dependiendo de las especificaciones del certificado instalado en el servidor. Sin embargo tiene muchas desventajas, pues aún tenemos que ver como autentificar a los clientes, se encripta todo lo que se transporta por lo que no podremos usar encabezados SOAP para rutear la petición de una maquina a otra. Para lo que sirve realmente es para que el cliente se asegure que sólo el servidor podrá ver lo que intercambia y saber bien con quien está hablando, pero aún tenemos el problema de que el cliente necesita saber a quien le va a enviar información y asegurar está.
Kerberos: esto está un poco más limitado a redes locales, usando Active Directory o similar para emitir los tokens de seguridad que podrán usar el cliente y el servidor para autentificar unos a otros y de ser necesarios encriptar ciertas partes de la petición SOAP. Este tipo de autentificación al igual que la de certificados (como SSL o X.509), se conoce broker authentication pues necesitamos de un directorio o un certificador.
UserName tokens, en este caso el cliente se autentifica usando un UserName y Password o algún “known secret”. La desventaja principal viene al momento de encriptar la información, pues el cliente y el servidor necesitan conocer previamente que llaves usar.
También se puede usar un BinaryToken basado en algún algoritmo, esto sería una solución similar al UsernameToken.
Un certificado digial X.509, está es una de las soluciones más difíciles de administrar, pero es igual la que ofrece mayores ventajas. Los certificados deberán de estar inslados en el cliente y en servidor (dependiendo de cual o cuales de las partes se quieran identificar). En el caso de querer cifrar partes del mensaje, al igual que con Kerberos, se puede usar el certificado (casi todos) para una encripción asimétrica de tal forma que, similar a como lo hace SSL de manera “automática (al menos para el desarrollador)” , se utiliza una llave pública para encriptar la información y una privada para desencriptarla.

¿Cómo funciona?
WSE es una add-in para VS 2005, cuando den click derecho sobre un proyecto aparece una nueva opción en el context menú. Está nos permite hacer modificaciones en los archivos de configuración y crear una política de requerimientos (principalmente para seguridad) de tal forma que el proyecto se pueda apegar a esto.

Conclusión

Wizzy o WSE es muy extenso, lo suficiente como para que sea necesario simplemente hacer una introducción y dejarlos con algunos links que les puedan ser de utilidad.

Referencias

· ARCast - Securing Web Services with X.509 Certificates in WSE 3.0 (Part 1)
· ARCast - Securing Web Services with X.509 Certificates in WSE 3.0 (Part 2)
· ARCast - Web Services Security Patterns Post Game Show
· ARCast - Web Services Security Patterns (Part 1)
· ARCast - Web Services Security Patterns (Part 2)
· Expert Service-Oriented Architecture in C# using the Web Services Enhancements 2.0
· Chequen ArcCast constantemente están publicando nuevos episodios relacionados con WS y WSE 3.0, recientemente publicaron unos de Kerberos Tokens, UserName Tokens y algo nuevo de WCF.
· Una excelente referencia y muy práctica es http://msdn.microsoft.com/securityguidance no únicamente para WS, sino para todo lo relacionado con seguridad.
· Una buena guía y un libro gratuito es el de Patterns and Practices: “Web Service Security Scenarios, Patterns and Implementation Guidance for Web Services Enhancements (WSE) 3.0”. El libro sirve como guía para poder escoger los patrones de seguridad necesarios para un escenario determinado.
· La página oficial de Wizzy no pudiera faltar: desde ahí pueden descargarlo, les sugiero vean los Quickstarts o ejemplos que incluye.
· Hay un lab muy bueno que te va llevando paso a paso en como usar WSE 3.0. No lo he terminado de revisar, me lo paso Jaime y pinta para ser muy útil.

martes, marzo 14, 2006

Ahora si algo de arquitectura y .NET

Últimamente he estado escuchando unos podcasts de ArCast o Channel 9. Hay temas muy interesantes y está página se actualiza muy seguido, les sugiero que se avienten un clavado y chequen que temas les interesan en Channel 9 lo hacen como si fuera un programa de radio, son entrevistas uno a uno o uno a muchos donde Ron Jacobs (el conductor) entrevista a exportes en diversos temas de arquitectura.

 

Algunos de los temas que he visto escuchado:

·         Click Once, entrevistan a dos personas que utilizaron No Touch Deployment (pre .NET 2.0) para controlar las actualizaciones de una aplicación que se utiliza en todo Microsoft, por lo que requerían que un montón de gente bajaba y mantenía actualizada su versión, es interesante ver como algo que resulta tan sencillo (sobre todo ahora con Click Once), puede realmente cumplir requerimientos empresariales tan exigentes.

·         ADAM vs AD: bueno no es tanto uno contra otro, más bien comparan de que trata cada uno, sugieren cuando usarle, etc, etc, etc, blablabla. La verdad no quede muy convencido, será porque estoy muy acostumbrado a usar SQL Server o alguan DB relacional para hacer persistente la información en lugar de usar algo como ADAM, aún después de escuchar la platica me quede con la idea de que el Directorio seguira siendo para autentificar usuarios y en la DB  van datos. Aún así, valdría la pena cambiar el esquema tal vez para guardar información del perfil de usuarios.

·         DSI and MOM: este no se los platico (la verdad no entendi jejeje), no es cierto. Todavía no lo termino de escuchar, pero parece un tema interesante, sobre todo para aplicaciones muy grandes que necesiten ser bastante configurables y manejadas, uno como arquitecto deberá tener en cuenta cuestiones de management y dejar de pensar en que se encarguen los tipos del departamento de sistemas.

·         Enterprise Library 2.0: un tema super interesante, los episodios que escuche hablan más de la arquitectura de EntLib 2.0, no entran tanto en detalle respecto a los bloques. A grandes rasgos se compone de 3 core components, el Object Builder (como interactua OB o CAB con EntLib y Web Cast con Peter Provost), algunos Wrappers para el System.Configuration y algo de Instrumentation.

 

Creo que les he dejado material suficiente a quien sea que fuera que llegue a entrar a mi blog, espero y sea de su interes y dejen sus comentarios.

 

Saludos.

 

 

 

Miguel A. Madero Reyes

Integradores Tecnológicos S.C.

www.integradorestecnologicos.com
miguel.madero@integradorestecnologicos.com

(871)716-7133

Matamoros #585 ote.

Col. Centro, 27000

Torreón, Coahuila