我们应该在业务逻辑层 (BLL) 中拥有啥

Posted

技术标签:

【中文标题】我们应该在业务逻辑层 (BLL) 中拥有啥【英文标题】:What should we have in a Business Logic Layer (BLL)我们应该在业务逻辑层 (BLL) 中拥有什么 【发布时间】:2011-01-08 07:03:47 【问题描述】:

我知道这是一个非常基本的问题。但我真的无法理解我们应该在 BLL 中拥有什么。 让我举个例子。 让我们考虑一个用于方便用户登录的 Login.aspx 网页。 在这种情况下,Login.aspx 将有两个文本框和一个登录按钮。(表示层)。 数据访问层将具有检查用户名和密码是否正确的功能。

我认为我不需要在此页面中添加其他内容。那么我将在 BLL 中拥有什么。 如果你想添加一些 BLL 中应该有的功能,请添加。

【问题讨论】:

【参考方案1】:

不,BLL 检查用户名和密码是否正确。 DAL 仅用于数据访问。

【讨论】:

所以你的意思是,点击登录按钮,我将调用 BLL 中的一个函数,通过将用户名和密码传递给 DAL 来检查它们是否正确 @kprobst,我应该在 BAL 中写一个 Sql 查询 例如,假设您正在检索基于用户名的密码哈希,并根据提供的密码对其进行验证。 DAL 用于从存储数据的表中提取数据,BLL 用于验证散列。一般来说,任何逻辑都不应该存在于数据库中,无论是否是业务。那是在业务层。这并不总是可能的,但您应该努力将尽可能多的代码保留在数据库之外。为此目的考虑 DB 的 DAL(ORM,等等)部分。 不,DAL 仅用于从数据库中提取数据。这就是 DAL 的定义,除非您将它与 ORM 混淆。【参考方案2】:

“数据访问层将具有检查用户名和密码是否正确的功能” - 错误。 BLL 会这样做,DAL 只会检索(或尝试检索)用户的信息,而不对其进行任何检查。

【讨论】:

所以在这种情况下,我正在执行一个 SP,那么我应该在哪里向该 SP 添加参数,在 BLL 或 DAL 中 您的 BLL 应要求 DAL 调用 SP,BLL 将在其返回时解释其结果。 DAL 只是一个几乎无脑的管道。 所以这意味着在 BLL 中我将向该 SP 添加参数并将其传递给 DAL 以执行。 不,BLL 对 SP 和参数一无所知。 DAL 应该有一个方法来接收任何必要的参数并使用这些参数创建数据库调用。 那么这里的BLL有什么用。我可以直接从表示层调用 DAL 的功能。【参考方案3】:

你应该有这样的东西:

UI 调用BL.SaveUsernameAndPassword(string user, string pass);

BL.SaveUsernameAndPassword 应该验证字符串,然后调用DAL.SaveUsernameAndPassword(string user, string pass);

DAL.SaveUsernameAndPassword 应该将这些参数放入您的 SQL 查询中并执行它,假设数据有效

【讨论】:

所以在这种情况下,我的所有项目都不能使用通用 DAL,因为我必须在 DAL 中编写查询。 为什么必须在 DAL 中编写查询会阻止您在项目中使用通用 DAL? 在某些项目中,我可能想从不同的表中选择不同数量的变量。 嗯,在这种情况下,每个项目应该有不同的 DAL。然后 BL 将根据项目选择使用哪个 DAL。 您的 DAL 应该是直接映射到您的数据库。你不希望它包含任何逻辑,或者做任何聪明的事情,比如映射到不同的数据库,它只是来回传递数据。

以上是关于我们应该在业务逻辑层 (BLL) 中拥有啥的主要内容,如果未能解决你的问题,请参考以下文章

架构中MVC模型和业务逻辑层的区别

三层架构和mvc模式有啥关系

业务逻辑层的使用

如何设计业务逻辑层

三层架构之业务层逻辑层

使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑