Esta factory inicialmente hacia parte del Web Service Factory(también conocido como Service Factory) como el Data Access Guidance Package, posteriormente P&P saco una nueva versión del Service Factory conocida como el Service Factory Modeling Edition, la cual se enfoca en los servicios web y no en el acceso a datos, excluyendo al Data Access Guidance Package, el cual a su vez se convertiría en el Repository Factory.
Repository Factory Sample
- Visual Studio 2005
- Sql Server 2005
Descargue los siguientes paquetes e instalelos en el orden que se índica.
1. Guidance Automation Extension(GAX)
2. Guidance Automation Toolkit
3. Repository Factory(DataAccessGuidancePackageSetup.msi)
2. Esqueleto proyecto.
3. Habilitar Repository Factory en Visual Studio 2005.
4. Asignar responsabilidades a los proyectos.
1. Base de datos.
Antes de utilizar cualquier generador de código(en esencia el Repository Factory es una generado de código) que se base en el esquema de la base de datos es muy importante tener bien definida la base de datos, ya que después de que se genere el código, normalmente se realizaran cambios sobre este código, lo que hace complicado volver a utilizar la herramienta de generación sobre el código que ya fue generado.Para este ejemplo utilizaremos las tablas del shcema Purchasing de la base de datos AdventureWorks.
Cree una base de datos en Sql Server 2005 con el nombre RepositoryFactorySample(o el que usted desee) y ejecute el siguiente script.
2. Esqueleto del proyecto.
Abra Visual Studio 2005, cree un nuevo proyecto de tipo class library (podría ser también de tipo Windows, Web o Consola) con el nombre RepositoryFactorySample(o el que usted desee), borre el proyecto que se crea por defecto y adicione tres proyectos, dos de tipo class library con los nombres BusinessEntities y DataAccess y cree uno de tipo Windows( o web) con el nombre AppHost.
3. Habilite el Repository Factory en Visual Studio 2005.
Para comenzar a utilizar el Repository Factory ejecute los siguientes pasos:
Vaya al menú Tools y ejecute la opción Guidance Package Manager.
Dé click en Enable/Disable Packages.
Seleccione Repository Factory, dé click en Ok y luego en Close, inmediatamente aparecerá la ventana de Guidance Navigator la cual puede ser cerrada si así lo deseas.4. Asignar responsabilidades a los proyectos.
Para el Repository Factory hay tres tipos de responsabilidad de proyecto:
- Host Project: Contiene el archivo de configuración(App.config o Web.config) con la cadena de conexión a la base de datos.
- Bussines Entities Project: Contendrá a los objetos de negocio generados por el Reposiroty Factory.
- Data Access Project: Contendrá a los objetos de acceso a datos generados por el Reposiroty.
A un proyecto se le puede asignar una, dos o las tres responsabilidades de proyecto, para este ejemplo a cada proyecto se le asignará la responsabilidad correspondiente:
Proyecto->Responsabilidad
AppHost->Host Project
BussinesEntities->Bussines Entities Project
DataAccess->Data Access Project
Para esto por ejemplo siga los siguientes pasos:
Dé click derecho en BussinessEntities y ejecute Repository Factory – Specify Project responsibility. 5. Conexión a la base de datos.
Dé click en el botón del campo Connection String, inmediatamente aparece una ventana para seleccionar el Data Source, seleccione Microsoft Sql Server, en Data provider seleccione .Net Framework Data Provider SQL Server, dé click en Ok, inmediatamente aparece el cuadro de dialogo Connection Properties ingrese los campos correspondientes para conectarse a la base de datos creada anteriormente, dé click en Ok.
Dé click en Finish.6. Crear CRUD Store Procedures.
En ServiceHost Project seleccione \AppHost, en Connection name seleccione ConnectionDB y dé click en Next.
Un bug, si señores como todo buen producto de software este tampoco está excento de esto, y ni modo de reclamar ya que estos Software Factories son libres y tienen garantía As Is, además son open source, asi que si alguno le quiere dar una mirada al código y de paso resolver este bug, pues bien puede hacerlo descargandose el código aquí. Pero bueno continuemos, selecciona todas las tablas, no selecciones sysdiagrams y dá click en Next.
En este parte vemos que por cada tabla se crearán seis(6) store procedures, uno para insertar un registro, uno para actualizar un registro, otro para eliminar un registro, para obtener todos los registros, para obtener un registro por llave primaria y para obtener registros por las llaves foráneas, y podemos seleccionar solo aquellos que consideremos que necesitemos. La verdad a mi me parece que en esta parte el Guidance se queda corto, ya que hay mas store procedures que podemos llegar a necesitar, como por ejemplo eliminar registros por cada llave foránea, o obtener registros por cada llave foránea.
Dé click en Next.
Por último debes darle un nombre al archivo donde se guardara el script para la creación de los store procedures, dé click en Finish. Este archivo se creará en el proyecto DataAcces, y antes de ejecutarlo podemos crear los store procedures que nos hagan falta.Ejecute este script en la base de datos previamente creada.
7. Crear Business Entities.
Este recipe permite crear por cada tabla de la base de datos en un Business Entity, para esto dé click derecho sobre el proyecto BussinesEntities y ejecute Repository Factory – Create business entities from database.
Seleccione en ServiceHost Project AppHost y en Connection name ConnectinoDB, dé click en Next.
Seleccione Tables y dé click en Next. Por favor no seleccione sysdiagrams.
En esta sección pueden cambiar las propiedades (cada propiedad es una columna de la tabla respectiva del Businees Entity) de cada Business Entity a crear.8. Crear objetos de acceso a datos.
Este recipe creará un conjunto de clases por cada Bussines Entity pero los más importantes a tener en cuenta son la interfaces IEntityRepository y las clases que las implementan.
Seleccione en ServiceHostProject AppHost y en Connection name en ConnectinoDB dé click en Next.
Seleccione en Bussines entities project BussinesEntities y dé click en Next.
Seleccione todos los Entities y dé click en Next.
Por cada Entity se crean por defecto cuatro operaciones, DeleteEntity, GetAllFromEntity, InsertEntity y UpdateEntity, adicionalmente se pueden adicionar otras operaciones como GetOne para obtener un registro por llave primaria, GetMany para obtener varios registros normalmente por llaves foráneas. Para adicionar una operación debe dar click en Add..
Dé click en Finish y en Finish nuevamente, en este mometo el Repository Factory realizará su magia y creará todo la capa de acceso a datos.
Por cada Entity se crea una carpeta de artefactos para acceder a la tabla correspondiente a la base de datos. La clases más importante es la EntityRepository la cual implementa la Interface IEntityRepository, una de ellas es por ejemplo la ProductVendorRepository la cual implemente IProductVendorRespository, esta es la clase que contiene todos los métodos CRUD para la Tabla/Entity.Abra en VS2005 el App.Config del proyecto AppHost y mire que adicional a las clase que se han generado, en el archivo de configuración se ha creado una sección RepositoryFactory la cual contiene a su vez la sección repositories donde se especifica cada par IEntityRepository/EntityRepository.

9. Utilizando la fábrica RepositoryFactory.
Por ultimo al proyecto del AppHost adicionaremos referencia a los proyectos BussinesEntities y DataAccess y a la dll de Microsoft.Practices.Repository que se encuentra en "C:\Program Files\Microsoft patterns & practices\Data Access Guidance Package Setup\Microsoft.Practices.Repository.dll" y agruegue el siguiente código a la forma.
using System;Happy Coding
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BussinesEntities;
using DataAccess;
using Microsoft.Practices.Repository;
namespace AppHost
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Vendor vendor = new Vendor();
vendor.AccountNumber = 1;
vendor.ActiveFlag = false;
vendor.CreditRating = 10;
vendor.ModifiedDate = DateTime.Now;
vendor.Name = "Vendedor1";
vendor.PreferredVendorStatus = false;
vendor.PurchasingWebServiceURL ="http//ehudesgarcia.blogspot.com";
IVendorRepository repository = RepositoryFactory.Create<IVendorRepository>("ConnectionDB");
repository.Add(vendor);
}
}
}


4 comentarios:
Me gusta el wizzard online... Pero para aquellos que vivimos en la ignorancia al respecto de estos temas, sería interesante ver al final un link hacia alguna parte donde uno lo vea en funcionamiento, o algunos pantallazos de la versión final. Felicitaciones! Gran esfuerzo!
Muy Buen Aporte . ;)
Muy buen aporte compañero caleño!!!!! una pregunta, como se integra todo esto con lo nuevo del Framework 3.5 (Linq to SQL || Linq To Entities), Patterns & Practices van a dar soporte al VS 2008??
Saludos!!
Excelente aporte, muchas gracias me fue de mucha utilidad.
Publicar un comentario