5

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

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

任何澄清将不胜感激。

4

2 回答 2

3

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

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

Mark Seemann 有一篇关于这个问题的有趣博客文章。

于 2013-03-07T10:34:30.427 回答
1

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

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

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

于 2013-03-07T09:24:31.187 回答