日期:2014-05-19  浏览次数:21574 次

一个关于三层里的数据层的疑惑——SQL语句算不算业务逻辑?
三层,一般分为   UI层、业务逻辑层、数据层。

如果我不用存储过程,只使用SQL语句的话,那么SQL语句要放在哪一层呢?

如果你的回的是   数据层   的话,那么下面这个问题是怎么回事呢?

假设一个环境,一个产品展示的网站,需要在首页里显示最新的十个产品,需要显示产品的名称、编号和价格。那么我需要写一个SQL语句:

select   top   10   名称,编号,价格   from   产品表  

那么这条语句是不是要写在数据层呢?当然要放在数据层了,逻辑层怎么可以有SQL语句呢?

好的,现在看看业务逻辑变化的时候我们要做什么?

假设现在要增加一个信息,要显示产品的产地。这是是需求的变化,业务逻辑的变化,对于客户来说这个没有什么难的,三个信息都显示了,再加一个产地有什么难的呢?(这样的变化也是很常见的)。

那么我们看看程序要改什么地方。

首先想到的就是那个SQL语句,显然必须要改一下:(不改的话产地怎么出来呢?)

select   top   10   名称,编号,价格,产地   from   产品表  

这个是在数据层的,也就是说要修改数据层。

好了我们有新的数据了,我们要把它显示出来,UI层也是要改的吧。又改了UI层。

假设我们用一个实体类来装载记录集,那么我们要修改实体类(加一个属性。实体类不算作逻辑层吧),我们要修改填充实体类的代码,这段代码也是放在数据层的吧?

好了现在我们改了数据层、UI层、实体类,那么逻辑层呢?要不要修改呢?好像不用吧。


明明是业务逻辑的变化,我们为什么要改数据层、要改UI层(改UI蹭还算说得过去),可是却没有改逻辑层?

是我的理解有问题?是我的设计不对?到底是什么原因呢?

是我学习的不够深刻?

兄弟们你们有没有遇到过类似的问题呢?你们是怎么解决的呢?


SQL语句   到底算做什么?

什么您说不用SQL语句,改用存储过程。那我还是要改存储过程,还是不用改逻辑层。


欢迎大家讨论,人多的话我一定会加分的,回复数超过分数我就会加分,加到200分为止(只能加到这么高了,目前我还发不了300分的帖:))。

ps;
我的观点:SQL语句   应该算作业务逻辑,应该放在数据层的外面。

或者说把数据层分为两块:数据访问、访问规则(访问逻辑、填充实体类)。

数据访问   简单说就是   SQLHelp   ,

访问规则   就是处理SQL语句,或者是存储过程,以及填充记录集的问题。


数据访问   解决如何访问数据库的问题,(侧重于数据库,比如多种数据库的访问等)

访问规则   解决访问哪个表,提取哪些字段,查询条件是什么,等等这些问题。(侧重于逻辑,需要哪些字段,不需要那些字段,要不要分页提取数据,还有添加、修改数据,删除数据,统计查询等)




------解决方案--------------------
up 长见识了
------解决方案--------------------
个人认为还是业务层吧,最好用存储过程,sql考虑安全因素麻烦
------解决方案--------------------
说到底界面只是访问数据库的接口,所以我觉得根本的业务还是通过sql实现,其它的部分可以对业务逻辑进行验证,拆分等其它处理。其实放哪一层都无所谓,关键是合理,怎么方便怎么做。当然方便包括以后维护的方便。
------解决方案--------------------
关注ing

对于三层也是有点疑惑
------解决方案--------------------
我认为只有where 后面的算。
我经常就是传递where 语句到DAL的
------解决方案--------------------
有意思的问题,个人认为放在数据层,实体对象应该包含该对象的所有属性,这样当增加显示字段的时候,只修改数据层和UI层就可以了。
------解决方案--------------------
sql 语句放在业务层
数据层就是访问数据库的通道 他不用关心 具体执行什么样的CRUD操作
------解决方案--------------------
不知道楼主所说的是不是跟我类似,或者是两马事,看看这篇
http://community.csdn.net/Expert/topic/5456/5456736.xml?temp=.4981043
------解决方案--------------------
再或者看看下面这篇
http://community.csdn.net/Expert/topic/5169/5169703.xml?temp=.7816278
------解决方案--------------------
个人理解 说错勿怪
=======================
逻辑层 含 业务逻辑和规则逻辑 写在一起也可以

"假设现在要增加一个信息,要显示产品的产地。 明明是业务逻辑的变化,我们为什么要改数据层...... "

逻辑层不是处理这个变化的
应是 例如:一个留言板 每天最多发100条回复 多的话提交不了 这个控制应该放在逻辑层 因为他没有改变数据库 只是业务逻辑的改变

而你上面的改变是改变了数据库了, 实体模型、数据层都应改变

如果还需要在前台显示的话 当然需要改表示层了
我们也经常遇到增加数据字段 而前台不需要显示的时候 如状态字段等等
这时就不用改表示层了

------解决方案--------------------
你要先了解三层主要是干吗用的,就很明白了
比如你要用ACCESS2000和SQLSERVER2000数据库.那么请问你将存储过程放在哪里呢.
如果是SQL语句那么select @@identity之类的语句你放到业务层,ACCESS2000能执行成功吗?
所以不要混淆公共数据库操作类和三层
------解决方案--------------------