假设我有一个类似于 Layered Architecture Sample 的架构。我们还假设每个大盒子都是它自己的项目。框架框和每一层都将是它自己的项目。如果我们不使用 IoC,而是采用没有接口(interface)的传统分层方法,则服务将引用业务,业务将引用数据,所有这些都将引用框架。
现在的要求是将日志记录到数据库中,因此框架可能需要引用服务来访问数据。这有两个问题:
- 您现在有一个循环依赖(记住,没有接口(interface))。如果您使用带有 IoC(依赖注入(inject)或服务定位器)和组合根的接口(interface),大部分问题都可以解决。这是唯一的方法还是你可以在没有界面的情况下做到这一点?
- 如果您从事业务并需要记录某些内容,则必须再次跳转到服务。有没有什么方法可以在没有组合根的情况下只从表示跳转,而不从服务/业务/数据跳转?
我知道我在某种程度上回答了我自己的问题,但我基本上想了解这种架构在没有 IoC 的情况下是否可行。
最佳答案
如果没有某种控制反转,您就无能为力。
假设您的语言支持 .NET 中的反射等功能,您可以尝试动态调用代码并在运行时反转控制。您不需要接口(interface),但您可能必须标记/装饰或为上层中所需的类型制定约定。
我现在只是在考虑疯狂的、不务实的方法:您可以对二进制文件进行后处理并在每一层中注入(inject)日志记录代码。
关于language-agnostic - 记录横切关注点需要访问数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921456/