Согласно SOLID, вы не только должны создавать интерфейс, и не только он должен находиться в другом файле, но и в другой сборке.
Зачем? Потому что любое изменение исходного файла, который компилируется в сборку, требует перекомпиляции сборки, а любое изменение сборки требует перекомпиляции любой зависимой сборки. Итак, если ваша цель, основанная на SOLID, состоит в том, чтобы иметь возможность заменить реализацию A реализацией B, в то время как класс C, зависящий от интерфейса, мне не нужно знать разницу, вы должны убедиться, что сборка с I в нем не меняется, тем самым защищая обычаи.
«Но это просто перекомпиляция», я слышу ваш протест. Ну, это может быть, но в вашем приложении для смартфона, которое облегчает пропускную способность данных ваших пользователей; загрузить один двоичный файл, который изменился, или загрузить этот двоичный файл и пять других с кодом, который зависит от него? Не каждая программа написана для использования на настольных компьютерах в локальной сети. Даже в том случае, когда пропускная способность и память дешевы, более мелкие выпуски исправлений могут иметь значение, поскольку их несложно распространить на всю локальную сеть через Active Directory или аналогичные уровни управления доменом; Ваши пользователи будут ждать только несколько секунд, пока он будет применен при следующем входе в систему, а не несколько минут, пока все будет переустановлено. Не говоря уже о том, что чем меньше сборок нужно перекомпилировать при создании проекта, тем быстрее он будет построен,
Теперь, отказ от ответственности: это не всегда возможно или возможно сделать. Самый простой способ сделать это - создать централизованный проект «интерфейсы». Это имеет свои недостатки; код становится менее пригодным для повторного использования, потому что на интерфейсный проект И на проект реализации нужно ссылаться в других приложениях, повторно использующих слой постоянства или другие ключевые компоненты вашего приложения. Вы можете преодолеть эту проблему, разделив интерфейсы на более тесно связанные сборки, но в вашем приложении будет больше проектов, что делает полную сборку очень болезненной. Ключ - баланс и поддержание слабосвязанной конструкции; обычно вы можете перемещать файлы по мере необходимости, поэтому, когда вы увидите, что классу потребуется много изменений или что регулярно потребуются новые реализации интерфейса (возможно, для взаимодействия с недавно поддерживаемыми версиями другого программного обеспечения,