За словами SOLID, ви не тільки повинні створювати інтерфейс, і не тільки він повинен бути в іншому файлі, він повинен бути в іншій збірці.
Чому? Оскільки будь-яка зміна вихідного файлу, який збирається в збірку, вимагає перекомпіляції збірки, а будь-яка зміна в зборі вимагає перекомпіляції будь-якої залежної збірки. Отже, якщо ваша мета, заснована на SOLID, полягає в тому, щоб мати можливість замінити реалізацію A на реалізацію B, тоді як клас C, залежний від інтерфейсу, я не повинен знати різниці, ви повинні переконатися, що збірка з I він не змінюється, захищаючи тим самим звичаї.
"Але це просто перекомпіляція" Я чую, як ви протестуєте. Добре, що може бути, але у вашому додатку для смартфонів, що простіше пропускання даних користувачів; завантаження одного бінарного файлу, що змінився, або завантаження цього бінарного файлу та п’ять інших з кодом, який від цього залежить? Не кожна програма написана для споживання настільними комп'ютерами в локальній мережі. Навіть у тому випадку, коли пропускна здатність та пам’ять дешеві, менші випуски патчів можуть мати значення, оскільки вони банальні для передачі на всю локальну мережу через Active Directory або подібні шари управління доменом; ваші користувачі чекатимуть лише декількох секунд, коли він буде застосований наступного разу, коли він увійде, а не кілька хвилин, щоб все це було перевстановлено. Не кажучи вже про те, що чим менше збірок, які потрібно перекомпілювати під час створення проекту, тим швидше він буде складений,
Тепер, відмова від відповідальності: Це не завжди можливо чи можливо зробити. Найпростіший спосіб зробити це - створити централізований проект "інтерфейси". Це має свої мінуси; код стає менш використаним, оскільки на проект інтерфейсу ТА на проект реалізації потрібно посилатися в інших додатках, що повторно використовують шар стійкості або інші ключові компоненти вашого додатка. Ви можете подолати цю проблему, розділивши інтерфейси на більш щільно з'єднані збірки, але тоді у вас є більше проектів у вашому додатку, що робить повноцінне складання дуже болісним. Ключ - баланс та підтримка слабко пов'язаної конструкції; зазвичай ви можете переміщувати файли по мірі необхідності, тож коли ви бачите, що для класу знадобиться багато змін, або що нові реалізації інтерфейсу будуть потрібні регулярно (можливо, для взаємодії з нещодавно підтримуваними версіями іншого програмного забезпечення,