【问题标题】:Passing business entities through layers in multi layer architecture在多层架构中通过层传递业务实体
【发布时间】:2013-02-21 17:29:34
【问题描述】:

目前我正在开发一个利用多层架构的项目,如Application Architecture Guide 2.0 中所述,有 5 层(DAL、BLL、外观、表示层和公共层)。
这里我们有一个业务逻辑层,它由业务组件和业务实体(它们是使用 O/R 映射器生成的实体)组成,我们经常需要在表示层中使用这些实体来绑定和向用户呈现数据,所以我们将这些实体冒泡通过其他层直到表示层。

现在的问题是:
这是一个正确的方法吗? (根据我的定义,如果我们应该共享这些,我们应该将它们放在公共层中,以便我们可以在所有层中使用它们)。 我们不应该将这些实体移动到公共层吗?或者我们应该定义数据传输对象(DTO)之类的东西并通过层传递它们(这当然看起来是多余的)。

任何澄清将不胜感激。

【问题讨论】:

标签: architecture entities business-logic-layer architectural-patterns


【解决方案1】:

一个适当分层的应用程序通常会使用 DTO 来防止业务实体被掺假和扭曲以适应其他层的需求,以及其他原因。

但是,在非常小的应用程序中,您可以免除 DTO 映射的负担,并将业务实体一直传递到 UI。您可以将它们保留在 BLL 中,如果所有层都引用它,这并不引人注目。无论如何,它不再是一个真正的分层应用程序,因为您将架构压缩成一个大层。

Mark Seemann 在这个问题上有一个有趣的blog post

【讨论】:

  • 感谢链接,非常有趣。
【解决方案2】:

仅将您的业务实体保留在业务层中。 DTO 最初可能看起来是多余的,但随着项目的发展,您会开始注意到它们之间的差异:DTO 更扁平,序列化友好类型和实体具有更复杂的关系和权力,它们比 DTO 承载更多的应用程序逻辑。

DTO 是纯数据,因此它们适合在层之间传递该数据。它们不必直接代表您的实体,因此,当您需要修改 BLL 但保留服务合同时,它们可以提高兼容性。

唯一的例外可能是 DAL 和 BLL 交互,其中 DAL 将直接处理实体。但即使在这里,也可以使用 DTO 来吸收 ORM 的影响。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2023-03-25
    • 2014-04-13
    • 2012-03-08
    • 2010-12-07
    • 2011-06-16
    • 2013-04-19
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多