在我的n层架构中,我有一个mapper层来填充来自DBlayer的数据集/数据表的responsecontext。所以DBlayer调用Mapperlayer来完成工作。但在填写responsecontext之前,我需要做一些验证。为此,我应该从mapperlayer调用businesslayer吗?或者我应该将我从DBlayer获得的内容传递给businesslayer并要求businesslayer调用mapperlayer。
在这里,我的业务层将使用业务实体来执行自己的操作。请帮助我做出这个设计决定。
答案 0 :(得分:3)
任何一个都会“工作”,但我不希望将这些东西放在业务对象中。
让业务层调用映射器层会在包之间创建循环依赖关系。映射器层已经 以了解业务层 - 这是其职责的核心。
但为什么业务层应该知道映射器呢?映射与业务逻辑无关。当然,这种伤害是,如果存在双向依赖关系,你就永远无法独立测试它们。
我会将其视为单向依赖。您可以通过这种方式独立于映射对象测试业务对象。
我还将映射器保留在持久层中,而不是位于持久性和模型之间。让持久层返回业务对象,而不是ResultSets。如果可能的话,让它成为私人包。我的推理是一样的 - 最小的知识意味着最小的耦合。
有不同级别的验证。我说数据应该在进入数据库之前很久就已经过验证。在查询数据库时,除了特定的业务规则之外,不需要验证。这些规则应该是服务层中业务事务的一部分,而不是持久层。