Мне очень трудно согласовать IoC, интерфейсы и события. Посмотрим, смогу ли я объяснить это, не написав книгу.
Я только начинаю работать с IoC и играю с Spring. У нас есть простой слой данных, который был построен задолго до EF или других. Одним из классов является DBProcedure, который имеет несколько методов и событий.
Я создал интерфейс IDBProcedure, который реализует «настоящий» класс DBProcedure. В моде TDD я хотел бы иметь возможность заменить «настоящий» класс DBProcedure на другой, который реализует тот же интерфейс для тестирования. Для меня это означает, что интерфейс IDBProcedure должен быть определен в другом пространстве имен / проекте, чем мой уровень данных, верно?
Но DBProcedure может вызывать некоторые события, и эти события предоставляют пользовательские классы, полученные из EventArgs. Означает ли это, что EventArgs-классы должны быть определены и вне уровня данных? Похоже, это заставляет интерфейс работать, но это кажется плохим, потому что он распространяет слой данных вокруг?
С другой стороны, возможно, у меня неправильная идея - нормально ли включать пространство имен уровня данных, когда я тестирую, чтобы получить определения интерфейсов и событий, даже если я не использую ни один из «реальных» классов? 1009 *