一个关于三层里的数据层的疑惑——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能执行成功吗?
所以不要混淆公共数据库操作类和三层
------解决方案--------------------