Тип безопасности при обработке открытых и внутренних интерфейсов в одной и той же реализации - PullRequest
0 голосов
/ 21 ноября 2018

Название может быть немного не так, поэтому позвольте мне объяснить ситуацию.

Я нахожусь в 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, как я могу обработать получение интерфейса внутренней службы из интерфейса общедоступной службы?Очевидно, я могу читать, но я ищу архитектора, чтобы иметь безопасность типов.

...