Завязался тут у нас спор с коллегой по поводу "философии программирования". Интересно какие еще мнения будут относительно плюсов и минусов?
Не для каких либо частных случаев, а именно как основной подход.
Итак — Вариант 1 (для каждого класса необходимо иметь не менее 1 интрефейса. Получаем полный контроль над видимостью)
public interface IAbc
{
// пустой
}
public interface IAbcd:IAbc
{
//часто всего один метод, что бы потом из интерфейсов можно было конструировать различные объекты
void Method1();
}
.....
internal class Abc:IAbc
{
public void F1() {...}
public void Fn() {...}
}
internal class Abcd:Abc,IAbcd
{
public void Method1() {...}
public void Fx1() {...}
public void Fxn() {...}
}
.....
void Xxxx()
{
// доступ и работа только через интерфейсы, напрямую к объектами запрещено обращаться
IAbcd t1 = new Abcd();
t1.Method1(); // можно
t1.F1(); // нельзя
}
Вариант 2 (интерфейсы только когда действительно необходимо, нефиг плодить лишнее)
internal class Abc
{
protected void F1() {...}
protected void Fn() {...}
// можно было и в интерфейс выкинуть, если бы была необходимость обязательной имплементации
public virtual Method1() {}
}
internal class Abcd:Abc
{
public override void Method1() {...}
protected void Fx1() {...}
protected void Fxn() {...}
}
void Xxxx()
{
Abcd t1 = new Abcd();
t1.Method1(); // можно
t1.F1(); // нельзя
}
Возможно информации маловато, но пока не хочу перегружать подробностями. Надеюсь различия подходов понятны.