2014-01-24 28 views
0

我有一个n层应用程序,其中包括数据访问层(DAL)和业务逻辑层(BLL)。我在用来填充我的对象的DAL中使用SQL查询和存储过程。DAL中的默认排序顺序是否违反了关注点分离

因此,这里是我的问题:

是否在我的SQL查询的ORDER BY条款违反了关注点分离?

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

另一方面,数据库通常比应用程序代码更有效地对数据进行排序,所以出于性能方面的考虑,在BLL中进行排序时会有ORDER BY子句的激励。另外,我不确定是否在DAL中指定默认排序顺序确实违反了关注点分离。记录必须以某种方式从数据库中提取出来。为什么不根据最常见的情况对它们进行分类?在我们需要与默认不同的排序顺序的情况下,我们可以通过BLL中的某种方法进行排序。

+0

不知道我是否会反对那种存在,但个人而言,我认为我的业务逻辑依赖于来自我的访问层的排序会感到不舒服。 –

+0

@ChadSchouggins不知道我关注。你的意思是你不相信谁会在DAL中包含排序逻辑? –

回答

0

我觉得如果您有一个'默认'排序设置,在没有提供给过程的排序设置的情况下应用。

这将使代码重新使用和灵活前进....例如,如果您想允许用户自己定义排序设置?

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

+0

同意@trucker_jim,在DAL级别添加一个order by子句只是提供一个默认的排序顺序,这可以看作是一种优化,特别是如果这种排序经常使用。总是试图让DBMS做尽可能多的繁重工作,这是它的目的。 – 2014-06-09 16:51:07

+0

感谢您的回答。我基于几乎没有强烈反应的事实自己得出了很多结论,所以我认为这不是什么大不了的事情。我来自数据驱动的背景,并同意让数据库做“重负”,但我发现在面向对象的世界中,许多人将数据库视为二等公民,并且不希望任何“逻辑”在数据库级别。我将@ChadSchouggins的评论解释为不适合将来自DAL的排序顺序作为该思维模式的指示。 –

相关问题