[ Foro de C# ]

Pasar datos por parametro en una funcion o por campos de clase?

13-Feb-2014 20:40
Invitado (NicolasC#)
1 Respuestas

Como estan estimados? Mi consulta es sobre que conviene mas o cual seria una buena practica, que diferencia hay o como se deberia hacer cuando quiero pasar un dato de una clase a otra cuando llamo a una funcion, sobre todo ahora que programo en capas. Lei en la Web de Microsoft que es bueno para pasar de una clase a otra pasar los datos como parametro de una funcion. Entonces para que estan los campos de las clases? De hecho se me simplifica mucho pasar datos por ejemplo 10 datos juntos en 10 campos en vez de tener que pasar una estructura en una funcion con todos los datos. ya escuche varias voces pero no puedo definir como debo programar correctamente. Quedo al aguardo de sus conocimientos para poder dilucidar este tema. Les dejo un ejemplo de lo que trato de explicarles:

 
//Opcion de pasar datos por parametro.
Clase Pepe
{
BaseDatos BD = new BaseDatos();
 BD.GuardaDatosEnBase(Dato1,Dato2,....,Dato10);
o 
 BD.GuardaDatosEnBase(EstructuraConLos10datos);
}
 
Clase BAseDatos
{
void GuardaDatosEnBase(int,string,int,...,int10)
}
 
//Opcion pasaje por campos de una clase
Clase Pepe
{
BaseDatos BD = new BaseDatos();
 BD.Nombre = "Pepe";
BD.Apellido = "Paz";
BD.GuardaDatosEnBase();
}
 
Clase BAseDatos
{
privare string Apelli, Nom;
 
public Nombre
{set Nom;}
public Nombre
{set Apelli;}
 
void GuardaDatosEnBase()
{
     Utilizo Apelli y Nom para gaurdarlos en la base.
}
}
 



14-Feb-2014 00:31
Nacho Cabanes (+32)

Los atributos deberían ser privados, para ocultar los detalles internos de la clase. Por eso, yo soy partidario de la primera opción: pasar los datos como parámetro. Eso hace el programa más legible y también ayuda a que los cambios en los detalles internos de la clase no te afecten a todo lo que utilizar esa clase.

Eso no quita que tu segunda aproximación no es mala del todo, porque realmente no estás dejando acceso directo a los atributos, sino definiendo "propiedades" que los ocultan, pero esa es una característica de C# que no te podrás llevar a todos los lenguajes.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)