从分层软件中的不同组件聚合信息的正确方法是什么?
What's the right approach to aggregate information from distinct components in layered software?
互联网上有很多关于分层软件设计的信息,但我找不到一个常见问题的答案:我应该从不同的组件(或实体)访问兄弟组件或来自下层的组件聚合信息?
假设我有以下场景:
业务层:ConsumerBO
、OrdersBO
、MessagesBO
...
数据层:ConsumerDAO
、OrdersDAO
、MessagesDAO
...
ConsumerBO
x ConsumerDAO
、OrdersBO
x OrdersDAO
等关系一目了然。但是,如果我需要在 ConsumersBO
上编写一个方法来聚合来自 ConsumersDAO
、OrdersDAO
和 MessagesDAO
的信息,我应该通过创建 ConsumersBO
访问方法来实现吗来自其兄弟姐妹(例如:OrderBO
和 MessagesBO
)或来自下层的组件(例如:OrdersDAO
、MessagesDAO
)?为什么?
[编辑] 由于否决票重写此问题..
如果可能,请尝试让您的业务 class 依赖于他们的兄弟姐妹。这旨在减少层之间的耦合,这总是一件好事。
注意,业务层不应该直接依赖于数据层,因为前者比后者更抽象。通常我们让业务 classes 依赖于数据层 classes 实现的接口。例如,CustomerBO
将使用属于业务层的 ICustomerDAO
接口,而不是属于数据层的具体 CustomerDAO
class。
互联网上有很多关于分层软件设计的信息,但我找不到一个常见问题的答案:我应该从不同的组件(或实体)访问兄弟组件或来自下层的组件聚合信息?
假设我有以下场景:
业务层:ConsumerBO
、OrdersBO
、MessagesBO
...
数据层:ConsumerDAO
、OrdersDAO
、MessagesDAO
...
ConsumerBO
x ConsumerDAO
、OrdersBO
x OrdersDAO
等关系一目了然。但是,如果我需要在 ConsumersBO
上编写一个方法来聚合来自 ConsumersDAO
、OrdersDAO
和 MessagesDAO
的信息,我应该通过创建 ConsumersBO
访问方法来实现吗来自其兄弟姐妹(例如:OrderBO
和 MessagesBO
)或来自下层的组件(例如:OrdersDAO
、MessagesDAO
)?为什么?
[编辑] 由于否决票重写此问题..
如果可能,请尝试让您的业务 class 依赖于他们的兄弟姐妹。这旨在减少层之间的耦合,这总是一件好事。
注意,业务层不应该直接依赖于数据层,因为前者比后者更抽象。通常我们让业务 classes 依赖于数据层 classes 实现的接口。例如,CustomerBO
将使用属于业务层的 ICustomerDAO
接口,而不是属于数据层的具体 CustomerDAO
class。