Estoy contemplando dos diseños de clases diferentes para manejar una situación donde algunos repositorios son de solo lectura mientras que otros son de lectura-escritura. (No preveo ninguna necesidad de un repositorio de sólo escritura.)Cuál es el mejor diseño de clase C# para tratar con lectura + escritura versus solo
Diseño Clase 1 - proporcionar toda la funcionalidad de una clase base, a continuación, exponer la funcionalidad aplicable públicamente en subclases
public abstract class RepositoryBase
{
protected virtual void SelectBase() { // implementation... }
protected virtual void InsertBase() { // implementation... }
protected virtual void UpdateBase() { // implementation... }
protected virtual void DeleteBase() { // implementation... }
}
public class ReadOnlyRepository : RepositoryBase
{
public void Select() { SelectBase(); }
}
public class ReadWriteRepository : RepositoryBase
{
public void Select() { SelectBase(); }
public void Insert() { InsertBase(); }
public void Update() { UpdateBase(); }
public void Delete() { DeleteBase(); }
}
Diseño clase 2 - clase de lectura y escritura se hereda de la clase de sólo lectura
public class ReadOnlyRepository
{
public void Select() { // implementation... }
}
public class ReadWriteRepository : ReadOnlyRepository
{
public void Insert() { // implementation... }
public void Update() { // implementation... }
public void Delete() { // implementation... }
}
¿Es uno de estos diseños claramente más fuerte que el otro? Si es así, ¿cuál y por qué?
P.S. Si esto suena como una pregunta de tarea, no lo es, pero siéntete libre de usarlo como uno si quieres :)
¿Por qué es necesario distinguir entre los dos tipos de repositorio? –
@John, bueno, tal vez no lo es, pero estaba pensando que quiero asegurarme de proteger las tablas de la base de datos que no se supone que cambien de ediciones accidentales. – devuxer
@DanM: ¿qué dice tu DBA al respecto? La mayoría sentirá que el lugar para proteger la base de datos está en la base de datos, no en su código. –