language-agnostic - 记录横切关注点需要访问数据层

标签 language-agnostic circular-dependency n-tier-architecture

假设我有一个类似于 Layered Architecture Sample 的架构。我们还假设每个大盒子都是它自己的项目。框架框和每一层都将是它自己的项目。如果我们不使用 IoC,而是采用没有接口(interface)的传统分层方法,则服务将引用业务,业务将引用数据,所有这些都将引用框架。

现在的要求是将日志记录到数据库中,因此框架可能需要引用服务来访问数据。这有两个问题:

  1. 您现在有一个循环依赖(记住,没有接口(interface))。如果您使用带有 IoC(依赖注入(inject)或服务定位器)和组合根的接口(interface),大部分问题都可以解决。这是唯一的方法还是你可以在没有界面的情况下做到这一点?
  2. 如果您从事业务并需要记录某些内容,则必须再次跳转到服务。有没有什么方法可以在没有组合根的情况下只从表示跳转,而不从服务/业务/数据跳转?

我知道我在某种程度上回答了我自己的问题,但我基本上想了解这种架构在没有 IoC 的情况下是否可行。

最佳答案

如果没有某种控制反转,您就无能为力。

假设您的语言支持 .NET 中的反射等功能,您可以尝试动态调用代码并在运行时反转控制。您不需要接口(interface),但您可能必须标记/装饰或为上层中所需的类型制定约定。

我现在只是在考虑疯狂的、不务实的方法:您可以对二进制文件进行后处理并在每一层中注入(inject)日志记录代码。

关于language-agnostic - 记录横切关注点需要访问数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921456/

相关文章:

java - JPA 和 Lombok 在循环依赖中导致 StackOverflowError

database - 业务规则应该同时在应用层和数据库层执行,还是只在两者之一执行?

php - 当 Class_a 只是偶尔需要 Class_b 信息时,PHP 的最佳设计模式是什么?

networking - 为什么点对点编程是一个很难获得好的研究的话题?

algorithm - 一个人对一堆纸牌进行物理分类的最佳策略是什么?

c++ - 如何初始化const循环引用成员

python - 高尔夫代码: Finite-state machine!

.net - 循环依赖与 DRY

java - 如何建模和处理表示DTO以从复杂的域模型中抽象出来?

oop - 我从来没有遇到过写得很好的业务层。有什么建议吗?