从分层软件中的不同组件聚合信息的正确方法是什么?

What's the right approach to aggregate information from distinct components in layered software?

互联网上有很多关于分层软件设计的信息,但我找不到一个常见问题的答案:我应该从不同的组件(或实体)访问兄弟组件或来自下层的组件聚合信息?

假设我有以下场景:

业务层:ConsumerBOOrdersBOMessagesBO ... 数据层:ConsumerDAOOrdersDAOMessagesDAO ...

ConsumerBO x ConsumerDAOOrdersBO x OrdersDAO等关系一目了然。但是,如果我需要在 ConsumersBO 上编写一个方法来聚合来自 ConsumersDAOOrdersDAOMessagesDAO 的信息,我应该通过创建 ConsumersBO 访问方法来实现吗来自其兄弟姐妹(例如:OrderBOMessagesBO)或来自下层的组件(例如:OrdersDAOMessagesDAO)?为什么?

[编辑] 由于否决票重写此问题..

如果可能,请尝试让您的业务 class 依赖于他们的兄弟姐妹。这旨在减少层之间的耦合,这总是一件好事。

注意,业务层不应该直接依赖于数据层,因为前者比后者更抽象。通常我们让业务 classes 依赖于数据层 classes 实现的接口。例如,CustomerBO 将使用属于业务层的 ICustomerDAO 接口,而不是属于数据层的具体 CustomerDAO class。