解耦为 DAL 和 BLL - 我的担忧

Posted

技术标签:

【中文标题】解耦为 DAL 和 BLL - 我的担忧【英文标题】:Decoupling into DAL and BLL - my concerns 【发布时间】:2011-03-01 03:02:57 【问题描述】:

在很多关于这个主题的帖子中,我遇到了非常简单的例子,这些例子并不能回答我的问题。

假设有一个文档表和用户表。在用 ADO.NET 编写的 DAL 中,我有一种方法可以根据某些标准重试所有文档。现在我的 UI 我有一个案例,我需要显示这个列表以及创建者的名字。

据我所知,我已经使用 DAL containsig JOIN 语句中的一种方法完成了它。 但是,每次我有一个如此复杂的方法,我必须对一些没有将 1:1 标记为 DB 的对象进行自定义映射。

应该放在另一层吗?如果是这样,那么我将不得不从连接查询中恢复,以通过结果进行迭代并查询每个文档作者。 . .这没有意义......(性能)

这种情况的最佳方法是什么?

【问题讨论】:

【参考方案1】:

对于您的用户界面,我的建议是让 dto(那些 mvp/mvc 人员的视图模型)保存用户的数据和相应的文档列表。

自定义映射将始终存在,因此我建议您在此处查看 Automapper 以缓解这些映射问题。

【讨论】:

【参考方案2】:

我过去在创建自己的自定义数据访问层时遇到了同样的事情。您希望您的对象一对一地映射到您的数据库,但很多时候您只需要编写一个自定义函数来检索内部连接数据。我不会将这些自定义操作放入它们自己的层中。

有时,我所做的是创建一个通用类,负责检索网格、组合框等的数据,这些数据连接了来自多个表的信息。此类将返回包含检索结果的自定义对象。如果您对为您执行自动自定义映射的工具不满意,我建议您创建自己的自动映射类构建器实用程序。

只要您将应用拆分为数据访问、业务和 UI 层,我认为您的方向是正确的。

【讨论】:

以上是关于解耦为 DAL 和 BLL - 我的担忧的主要内容,如果未能解决你的问题,请参考以下文章

bll,dal 和接口实现

具有存储库模式的实体框架 DAL、BLL

业务层 (BLL) 数据访问层 (DAL) 和 UI 之间的通用结构?

Go Web App 中是不是需要有 DAL 和 BLL?

BLL,DAL,BO,插入数据

DAL 和 BLL 的单元/集成测试(使用 lambda)