Guest User

Интерфейсы

a guest
Oct 10th, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. Ты, например, пишешь генератор случайных имен. Ты записал имена в текстовый файл. У тебя есть класс TextFileStorage, который берет все возможные имена из файла и возвращает массив имен. Через месяц ты решил получать имена с какого-нибудь сайта. Для этого тебе надо не только написать новый класс WebsiteStorage, но и менять код там, где есть обращения к TextFileStorage. Если бы у тебя был интерфейс NameStorage, то тебе было бы достаточно изменить строчку
  2. > NameStorage nameStorage = new TextFileStorage();
  3. на
  4. > NameStorage nameStorage = new WebsiteStorage();
  5. и все, считай ты внес изменения так, что остальные компоненты твоего приложения их не заметили.
  6.  
  7. Юнит-тесты тоже становятся пизже. Например, у тебя класс NameGenerator в конструкторе принимает NameStorage. Если ты во всех юнит-тестах пишешь
  8. > NameGenerator nameGenerator = new NameGenerator(new TextFileStorage());
  9. то, когда ты сменишь TextFileStorage на WebsiteStorage, все твои тесты сломаются и тебе придется везде менять
  10. > new TextFileStorage()
  11. на
  12. > new WebsiteStorage().
  13.  
  14. Кроме того, если ты случайно сломаешь TextFileStorage или WebsiteStorage, то есть вероятность, что тесты NameGenerator у тебя тоже сломаются и тебе будет сложнее понять, что ошибка не в NameGenerator, а в NameStorage. Чтобы такого не было, ты можешь в конструктор передавать инстанс интерфейса NameStorage, у которого метод getNames() не будет лезть на сайт или в текстовый файл, а будет просто возвращать массив ["хуй", "пизда", "сковорода"], чтобы ты мог нормально тестить только NameGenerator, а не другие классы.
  15.  
  16. Ты спросишь: "Схуяли я буду так часто че-то менять?" Тырпрайзный код очень быстро обрастает новыми фичами и подвергается изменениям, поэтому в тырпрайзе все всегда используют интерфейсы.
Advertisement
Add Comment
Please, Sign In to add comment