在多层体系结构中通过各层传递业务实体



目前我正在做一个项目,利用应用程序体系结构指南2.0中描述的5层多层体系结构(DAL, BLL, Facade, Presentation layer和Common layer)。
这里我们有一个业务逻辑层,它由业务组件和业务实体(它们是使用O/R Mapper生成的实体)组成,我们通常需要在表示层中使用这些实体来绑定和向用户呈现数据,因此我们通过其他层将这些实体添加到表示层。

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

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

然而,在非常小的应用程序中,您可以省去DTO映射的负担,并将业务实体一路传递到UI。你可以把它们保存在BLL中,如果所有的层都有一个引用,那就不那么夸张了。它不再是一个真正的分层应用程序,因为你把架构压缩成一个大的层。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新