Я рассматриваю два разных класса для обработки ситуации, когда некоторые репозитории доступны только для чтения, а другие - для чтения-записи. (Я не вижу необходимости в репозитории только для записи.)
Дизайн классов 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(); }
}
Class Design 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. Если это звучит как вопрос о домашнем задании, это не так, но вы можете использовать его как один, если хотите:)