У меня есть интерфейс под названием IProjectUser, который определяет функцию чтения и функцию записи для чтения и записи в файлы проекта. У меня также есть класс Project, который содержит общий список объектов IProjectUser для управления файлами проекта. Оба они находятся в библиотеке классов Project.dll.
У меня также есть библиотека классов с именем A.dll, которая содержит класс с именем Foo, который реализует IProjectUser. Возможность чтения / записи файлов проекта является вторичной по отношению к этому классу. Он держит и манипулирует некоторыми данными. A.dll ссылается на Project.dll.
Приложение также содержит некоторые формы и другие классы, которые реализуют IProjectUser.
Я могу представить себе ситуацию в будущем, когда я захочу использовать A.dll в другом проекте, который не использует файлы проекта. Однако я буду вынужден включить Project.dll только потому, что это требуется A.dll. Даже если функциональность не является обязательной.
Существует ли другой шаблон проектирования, который позволил бы мне сделать интерфейс необязательным?
Надеюсь, я объяснил это достаточно ясно.
Обновление
А как насчет приведения объектов к интерфейсам? Это открыло бы возможность того, что интерфейс не реализован правильно. Это хороший или плохой подход к дизайну для такого рода проблем?
if (Foo is IProjectUser) {
ProjectUsers.Add(Foo as IProjectUser);
// etc
}