标题可能有点小,所以让我解释一下情况。
我在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实现中,如何处理从公共服务接口获取内部服务接口的问题?显然,我可以强制转换,但是我正在寻找一个架构师,这样我就可以拥有类型安全性。