【问题标题】:Does A Default Sort Order in DAL Violate Separation of ConcernsDAL 中的默认排序顺序是否违反关注点分离
【发布时间】:2014-02-15 01:04:49
【问题描述】:

我有一个 n 层应用程序,其中包括一个数据访问层 (DAL) 和一个业务逻辑层 (BLL)。我在 DAL 中使用 SQL 查询和存储过程来填充我的对象。

这是我的问题:

我的 SQL 查询中的 ORDER BY 子句是否违反了关注点分离?

一方面,排序逻辑似乎属于业务层,因为是我们的业务规则决定了我们为什么要以特定顺序显示数据。此外,我们可能希望以不止一种方式显示相同的数据。此外,我的数据访问代码不应该不知道它的显示方式等问题吗?

另一方面,数据库在排序数据方面通常比应用程序代码更有效,因此出于性能原因,使用 ORDER BY 子句优于在 BLL 中排序。此外,我不确定在 DAL 中指定默认排序顺序是否真的违反了关注点分离。记录必须以某种方式从数据库中出来。为什么不根据最常见的情况对它们进行排序呢?如果我们需要不同于默认的排序顺序,那么我们可以通过 BLL 中的某种方法进行排序。

【问题讨论】:

  • 不知道我是否会反对存在排序,但就个人而言,我认为我的业务逻辑依赖于访问层中的排序会感到不舒服。
  • @ChadSchouggins 不确定我是否关注。你的意思是你不相信做 DAL 的人会包含排序逻辑?

标签: sql sorting data-access-layer n-tier-architecture bll


【解决方案1】:

如果您有一个“默认”排序设置,我觉得没问题,该设置在没有为过程提供排序设置的情况下应用。

这将使代码具有可重用性和灵活性……例如,如果您希望允许用户自己定义排序设置怎么办?

我不认为这是违规行为,因为许多表都有明显的默认排序逻辑,否则需要一次又一次地重新应用。而且您说在数据库级别应用排序更有效是正确的。

【讨论】:

  • 同意@trucker_jim,在 DAL 级别添加 order by 子句仅提供默认排序顺序,这可以看作是一种优化,特别是如果经常使用这种排序。始终尝试让 DBMS 尽可能多地完成繁重的工作,这是它的设计初衷。
  • 感谢您的回答。基于几乎没有强烈反应的事实,我自己几乎得出了这个结论,所以我认为这没什么大不了的。我来自数据驱动背景,同意让数据库完成“繁重的工作”,但我发现在面向对象的世界中,许多人将数据库视为二等公民,不希望在数据库级别。我认为@ChadSchouggins 对来自 DAL 的排序顺序不满意的评论表明了这种心态。
猜你喜欢
  • 2012-10-15
  • 1970-01-01
  • 2011-05-20
  • 2015-12-20
  • 2017-05-21
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-04-13
相关资源
最近更新 更多