Интерфейсы где польза?
От: #John Европа https://github.com/ichensky
Дата: 17.05.17 10:06
Оценка:
Зависсимость.
Класс Salutation строго завязывается на структуру и реализацию интерфейса IMessageWriter.
private static void Main()
{
  IMessageWriter writer = new ConsoleMessageWriter();
  var salutation = new Salutation(writer);
  salutation.Exclaim();
}
class Salutation{
public Salutation(IMessageWriter writer){ ... }
public void Exclaim(){
    IMessageWriter.ChangeData();
    ...
    GetDataAndChangeIt(...);
}
}

Сегодня IMessageWriter.ChangeData(); — добавляет записи в файл, а завтра удаляет?
Меняешь реализацию класса IMessageWriter в классе ConsoleMessageWriter,
меняешь интерфейс IMessageWriter(названия методов/добавления новых/порядок их вызова)
и ходи по коду с дебаггером, тестируй где что перестанет работать как раньше.


Свобода.
Класс Salutation не зависит от "левых" классов.
Его методы строго определяют "интерфес" с помощью которого можно с ними взаимодествовать.
Методы как работали сегодня так и будут работать завтра и всегда.
Метод Exclaim всегда будет принимать ввиде параметра срутуру данных SomeData .
private static void Main()
{
  MessageWriter writer = new ConsoleMessageWriter();
  SomeData data=to_some_data_converter(writter.GetData());
  var salutation = new Salutation();
  salutation.Exclaim(data);
}
class Salutation{
public void Exclaim(SomeData data){
    ...
    GetDataAndChangeIt(...);
}
}


---
Если кто-то скажет, что логика реализации IMessageWriter в классе ConsoleMessageWriter не будет меняться,
потому что мы типа сначала программируем абстрактный слой, который умерит все наши требования в будущем, а только потом напишем его реализацию — это не правда, со временем приходится менять повидение всех частей программы. Т.к. со временем меняется все: железо, алгоритмы поиска/шифрования, требования заказчиков. И все предсказать невозможно, а значит невозможно написать супер-абстрактную модель, которую в будущем никогда не придется менять или менять так, чтобы не затронуть все части программы, которые ее реализуют.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
interface
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.