Мы работаем над проектом среднего размера (3 разработчиками более 6 месяцев) и должны принять следующее решение: мы хотели бы, чтобы интерфейсы были отделены от конкретной реализации. Первый - сохранить интерфейс в отдельном файле.
Мы хотели бы пойти дальше и отделить данные еще больше: мы хотели бы иметь один проект (CSPROJ) с интерфейсом в одном файле .CS плюс еще один .CS файл с помощью классов справки (например, некоторые публичные классы, используемые в этот интерфейс, некоторые перечисления и т.д.). Затем мы хотели бы иметь еще один проект (CSPROJ) с шаблоном factory, реализацией конкретного интерфейса и другими "рабочими" классами.
Любой класс, который хочет создать объект, реализующий этот интерфейс, должен включать первый проект, который содержит интерфейсы и общедоступные классы, а не сама реализация.
Это решение имеет один большой недостаток: он умножает количество сборок на 2, потому что у вас будет для каждого "нормального" проекта один проект с interace и один с реализацией.
Что бы вы порекомендовали? Считаете ли вы хорошей идеей разместить все интерфейсы в одном отдельном проекте, а не один интерфейс в своем собственном проекте?