Я рассматриваю два разных дизайна классов для обработки ситуации, когда некоторые репозитории доступны только для чтения, а другие - для чтения и записи. (Я не предполагаю никакой необходимости в хранилище только для записи.)
Дизайн класса 1 - предоставить все функциональные возможности в базовом классе, а затем публично представить применимые функциональные возможности в подклассах
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(); }
}
Дизайн класса 2 - класс чтения-записи наследуется от класса только для чтения
public class ReadOnlyRepository
{
public void Select() { // implementation... }
}
public class ReadWriteRepository : ReadOnlyRepository
{
public void Insert() { // implementation... }
public void Update() { // implementation... }
public void Delete() { // implementation... }
}
Один из этих дизайнов явно сильнее другого? Если да, то какой и почему?
P.S. Если это звучит как домашнее задание, это не так, но вы можете использовать его как один, если хотите:)