Название может быть немного не так, поэтому позвольте мне объяснить ситуацию.
Я нахожусь в SOA (сервисный уровень в одной сборке, без микросервисов), и у меня есть сервис A. Он наследуется ототкрытый интерфейс, который предоставляет свою «публичную» функциональность:
public interface IServiceA
{
IServiceB ServiceB { get; set; }
BusinesObjectDto Find(long id);
...
}
Для пользователя, находящегося за пределами уровня обслуживания, это то, что он должен видеть.У меня также есть внутренний интерфейс IInternalServiceA (все еще не определились с лучшим именем для этого):
internal interface InternalServiceA
: IServiceA
{
BusinessObject InternalFind(long id, bool checkCacheFirst = false)
}
За пределами уровня обслуживания связь основана на dtos, но внутри уровня обслуживания,сервисы (или любые другие компоненты) должны предоставлять свои доменные объекты / бизнес-объекты / модели между собой.Кроме того, когда службы общаются друг с другом на уровне службы, могут существовать методы, которые включают в себя более конкретные флаги (например, checkCacheFirst), которые не подходят для показа посторонним.
Зависимости служб публично предоставляютсяинтерфейс, и может быть подключен за пределами сервисного уровня (если нет, они лениво инициализируются внутри сервиса).Например:
var serviceA = new ServiceA();
serviceA.ServiceB = new ServiceB();
Вопрос в реализации ServiceA, как я могу обработать получение интерфейса внутренней службы из интерфейса общедоступной службы?Очевидно, я могу читать, но я ищу архитектора, чтобы иметь безопасность типов.