NET:Интерфейсы против классов
От: AlexNek  
Дата: 15.11.11 17:59
Оценка:
Завязался тут у нас спор с коллегой по поводу "философии программирования". Интересно какие еще мнения будут относительно плюсов и минусов?
Не для каких либо частных случаев, а именно как основной подход.

Итак — Вариант 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(); // нельзя
}

Возможно информации маловато, но пока не хочу перегружать подробностями. Надеюсь различия подходов понятны.
Cообщение написано в << RSDN@Home 1.2.0 alpha 5-AN-R6 rev. 8461>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.