Trabajo con clases de Negocio

26/09/2008 - 17:04 por Guillermo Peralta | Informe spam
Hola que tal,
Les planteo una consulta acerca de cual es la manera que uds creen conviente
para realizar lo siguiente utilizando una metodologia en Capas y Orientada a
Objetos.

El planteo es tener una clase Cliente y un clase Domicilios como propiedad
de la primera que realizan el mapeo de la Base de datos a un modelo OO

Cliente

IdCliente
Nombre
Domicilios


Domicilios
Calle
Numero


Hasta ahi todo bien. Ahora necesito tener una manera de cargar tanto los
datos del cliente como los de sus domicilios, eso lo implementaria a traves
de una clase de negocio llamada NegocioClientes


El 1º planteo es tener un metodo static dentro de NegocioClientes que
provea metodos de servicios para llevar a cabo las distintas acciones

Entidades.Clientes EntidadCliente = new Entidades.Cliente ( 123 );
//inicializo con el Id del Cliente

NegocioClientes.Fill (EntidadCliente ); //cargo los datos basicos del
Cliente
NegocioClientes.FillDomicilios (EntidadCliente); //cargo los domicilios
del cliente


//accedo a los datos del cliente de la siguiente manera
string Nombre = EntidadCliente.Nombre;

string Calle = EntidadCliente.Domicilios[0].Calle;



El 2º planteo es tener dentro de la clase de NegocioClientes un objeto
EntidadClientes como propiedad y disponer dentro de Negocio metodos para la
carga de estos datos:

NegocioClientes Cliente = new NegocioClientes ( 123); //inicializo con
el Id del Cliente

Cliente.Load (); //cargo los datos del cliente

Cliente.LoadDomicilios (); //cargo los domicilios

//accedo a los datos del cliente de la siguiente manera

string Nombre = Cliente.EntidadCliente.Nombre;

string Calle = Cliente.EntidadCliente.Domicilios[0].Calle;



Espero que se entiendan los distintos planteos, funcionalmente no encuentro
mayores diferencias entre uno y otro, y es por eso que me encuentro un poco
confundido en que metodología seguir.


Saludos
Guillermo Peralta

Preguntas similare

Leer las respuestas

#21 Guillermo Peralta
30/09/2008 - 16:19 | Informe spam
Si Alfredo ya te he entendido (mas o menos)

Ejecutas el SQL, llenas un DataSet y lo bindeas al DataSource
correspondiente, no te complicas con entidades personalizadas ni nada de eso
verdad?.
Me parece una opción valedera..
Es solo que tengo cierto "rechazo" a los datasets, debe ser un prejucio
personal, nunca me termino de convencer el modelo "desconectado" que provee
Ado.Net y por ahi tambien he leido que un DataSet es un objeto pesado en
memoria que carga muchos objetos que no creo que utilice, pero no por eso
debo descartarlo de plano.

No quiero seguir mucho mas con el tema ya he encontrado elementos
suficientes y agradezco a todos por su tiempo

Saludos
Guillermo Peralta

"Alfredo Novoa" escribió en el mensaje de
noticias:16t897u64q72l.34a3mgp4s1xg$
El Tue, 30 Sep 2008 09:29:17 -0300, Guillermo Peralta escribió:

Lo que sucede es que seguramente, debido a mi inexperiencia, no alcanzo a
dimensionar esa inconsistencia y falta de homogeneidad, los dataTable son
lo
más parecido al Recordset de VB6 ADO donde yo levantaba los datos de la
BD y
trabajaba con cada uno de los campos con mucha flexibilidad.



Lo que le parece inconsistente es usar las "clases de negocio" para unas
cosas si y para otras no. Querrá decir que o las usas para todo o no las
usas, y así el beneficio o el torzazo que te vas a dar si aciertas o te
equivocas será el máximo. Y por supuesto el tortazo máximo es el que te
vas
a llevar si se te ocurre usar las clases de negocio para todo, como podrás
comprobar muy pronto si lo intentas.

En nuestro modelo (y me imagino que en el de muchos que se dedican a
aplicaciones de gestion) las consultas o los datos son necesarios
extraerlos
de muchas tablas y me encontre con la dificultad de encontrar una
coleccion
de entidades que pueda representarme lo que estoy buscando.



Si, te estás encontrando con las razones por las que se abandonó la
gestión
de datos basada en referencias (punteros) en los años 70. El que no conoce
la historia está condenado a repetirla.

Supongamos que un reporte necesito mostrar los datos de un proveedor
detallando la venta de sus articulos, agrupado por la categoria de los
mismos y con el saldo de su cuenta corriente.

En este ejemplo bastante básico por cierto, nos encontramos con la
Entidad
Proveedor, con la entidad Cuenta Corriente, con la entidad Artículos, con
la
entidad Categoria de los artículos, y hasta con 4 o 5 entidades más.
Entonces la duda puntual es, cómo hago para devolver una coleccion de
entidades con semejante complejidad?



Ejecutas una instrucción SQL y obtienes la colección de los datos que
necesitas. Para eso se creo SQL.

Ahora, si solo necesito devolver un listado de clientes para llenar una
lista, bueno, es mucho más simple, porque simplemente "bindeo" la
List<Cliente> al datasource que necesito y listo.



¿Y por que no aplicar este mecanismo tan productivo a todo lo demás?

Ojo, no quiero que se me malinterprete y digan "al final pide consejo
pero
hace lo que quiere"



Pues eso es justo lo que deberías de hacer :-)


Saludos
Respuesta Responder a este mensaje
#22 Alfredo Novoa
30/09/2008 - 16:42 | Informe spam
El Tue, 30 Sep 2008 11:19:50 -0300, Guillermo Peralta escribió:

Ejecutas el SQL, llenas un DataSet y lo bindeas al DataSource
correspondiente, no te complicas con entidades personalizadas ni nada de eso
verdad?.



Bueno, en realidad no uso DataSet sino mi propio desdendiente de
IBindingList, por que a mi tampoco me gustan nada los datasets. Lo que pasa
es que también tiene su trabajo.

Pero por muy malos que sean los datasets siempre serán mejores que lo de
las "clases de negocio". Si tuviese que usarlos utilizaría directamente los
DataTable haciendo que funcionasen conectados usando "eventos".

Es solo que tengo cierto "rechazo" a los datasets, debe ser un prejucio
personal, nunca me termino de convencer el modelo "desconectado" que provee
Ado.Net



A mi tampoco, es un grandísimo error. Para poder trabajar "desconectados"
los datasets deberían de ofrecer muchísima más funcionalidad. Yo de momento
trabajo conectado. Antes de insertar una fila en mi "DataTable" intento
insertarla en la base de datos.

y por ahi tambien he leido que un DataSet es un objeto pesado en
memoria que carga muchos objetos que no creo que utilice, pero no por eso
debo descartarlo de plano.



Si, lo de los Fill es muy poco inteligente. Además de pesado en memoria
sobrecarga la red y el SGBD. Yo hago que mi "DataTable" se traiga solo los
datos necesarios en cada momento.

La verdad es que los programadores de gestión contamos con unas
herramientas malísimas para nuestro trabajo.


Saludos
Respuesta Responder a este mensaje
#23 Alfredo Novoa
30/09/2008 - 16:53 | Informe spam
El Tue, 30 Sep 2008 16:42:24 +0200, Alfredo Novoa escribió:

Antes de insertar una fila en mi "DataTable" intento
insertarla en la base de datos.



Pero por supuesto esto lo hace automáticamente sin que yo tenga que hacer
nada.
Respuesta Responder a este mensaje
#24 Jesús López
30/09/2008 - 17:29 | Informe spam
No estaría mal ver esa implementación de IBindingList en CodeProject o en
CodePlex por ejemplo.


"Alfredo Novoa" escribió en el mensaje
news:1s85hxo44ne24.ezcykph3rcgv$
El Tue, 30 Sep 2008 16:42:24 +0200, Alfredo Novoa escribió:

Antes de insertar una fila en mi "DataTable" intento
insertarla en la base de datos.



Pero por supuesto esto lo hace automáticamente sin que yo tenga que hacer
nada.
Respuesta Responder a este mensaje
#25 Pedro
30/09/2008 - 22:56 | Informe spam
Es solo que tengo cierto "rechazo" a los datasets, debe ser un prejucio
personal, nunca me termino de convencer el modelo "desconectado" que
provee Ado.Net y por ahi tambien he leido que un DataSet es un objeto
pesado en memoria que carga muchos objetos que no creo que utilice, pero
no por eso debo descartarlo de plano.




Si en un form o pagina usas un DataSet sin tipo y le agregas datatables con
o sin tipo eso es lo mas simple que puede ser.

No veo la necesidad de inventar con otras clases si le temes a la
complejidad. Ademas ya estan programados para las cosas mas comunes.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida