1

在我的 n 层架构中,我有一个映射器层来填充来自 DBlayer 的数据集/数据表的响应上下文。所以 DBlayer 调用 Mapperlayer 来完成这些事情。但在填充响应上下文之前,我需要做一些验证。为此,我应该从 mapperlayer 调用 businesslayer 吗?或者我应该将我从 DBlayer 获得的内容传递给 businesslayer,并要求 businesslayer 调用 mapperlayer。

在这里,我的业务层将使用业务实体进行自己的操作。请帮助我做出这个设计决定。

4

1 回答 1

3

任何一个都可以“工作”,但我不喜欢将这些东西放在业务对象中。

让业务层调用映射器层会在包之间创建循环依赖关系。映射层已经知道业务层——这是它的核心职责。

但是为什么业务层要知道映射器呢?映射与业务逻辑无关。当然,坏处是,如果存在双向依赖,您将永远无法独立测试它们。

我会将其保留为单向依赖项。您可以通过这种方式独立于映射对象来测试业务对象。

我还将映射器保留在持久层内,而不是位于持久层和模型之间。让您的持久层返回业务对象,而不是结果集。如果可能的话,让它成为私有包。我的推理是一样的——最少的知识意味着最小的耦合。

有不同级别的验证。我会说数据应该在进入您的数据库之前很久就已经过验证。查询数据库时应该不需要验证,除了特定的业务规则。这些规则应该是服务层中业务事务的一部分,而不是持久层。

于 2012-06-08T11:59:21.613 回答