在同一实现上处理公共和内部接口时,键入安全性

时间:2018-11-21 15:06:16

标签: c# interface soa

标题可能有点小,所以让我解释一下情况。

我在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)
}

在服务层外部,通信基于dto,但在服务层内,服务(或任何其他组件)应在它们之间公开其域对象/业务对象/模型。另外,当服务在服务层内部相互通信时,可能会存在一些方法,其中包括更具体的标志(例如,checkCacheFirst),这些标志不适合暴露给外部人员。

服务的依赖项在接口上公开公开,并且可以在服务层外部进行挂钩(如果没有,则在服务内部进行延迟初始化)。例如:

var serviceA = new ServiceA();
serviceA.ServiceB = new ServiceB();

问题是,在ServiceA实现中,如何处理从公共服务接口获取内部服务接口的问题?显然,我可以强制转换,但是我正在寻找一个架构师,这样我就可以拥有类型安全性。

0 个答案:

没有答案