表示层用到了sql关键字,是不是违背了分层原则?

时间:2021-11-08 09:15:06
用存储过程分页,条件用的是@where,在界面上时,出现了  " and 字段名=",
出现了 and,between,like这样的sql关键字,这样是不是违背了分层原则,

这种情况该怎么写好呢?

10 个解决方案

#1


这种情况可以使用一个专门的类来组织SQL语句

#2


是的,最好移到sqlserver层

#3


不对,数据访问层

#4


是的

不过也不用太过于苛求 

有的时候太苛求没有必要

适合项目的才是最好的

#5


数据访问层是专门向数据库交互的类,应该保证其可移植性,如果写进数据访问层的话,那就不灵活了

#6


也并不算违背。只是不建议。就像linq本身就封装的不错,但他同时也保留了直接使用sql语句的查询

gridview,treeview一类的控件更是如此,他提供了一些常规的相对不变的一些东西,但是如果你要变化他们,他也同时提供给你变化的机会。

对于n层来说,你可以保留这个,但是不建议调用代码的程序员这么做,除非他实在是特殊需要(net本身也是这么处理的,他保留指针,但通常不用指针,除非你有特别的要求需要你才会声明unsafe去使用他们)

#7


最好不要在表示层见到数据库的东西

#8


任何一套成熟的架构,必然会有一个SQL语句装配器类似的东西.一来是可以适应数据库迁移,二来也会进行一些加密处理,进而防止sql注入.所以,不论是从可移植性的角度还是安全性的角度,直接拼sql都是不可取的,而与你说的"分层"关系却不大

#9


比较赞同8楼的观点,分层的架构各层之间如何传递数据似乎是个值得讨论的问题。

#10


其实应该将问题的重点倒过来看,既然你具体地发现那些“语法”限制了你使用后台数据系统,“管它什么三层不三层的学究气”呢?你就可以慢慢找出这个具体问题的解决之道。具体问题才可以揭穿许多东西,你自己就可以回答“如果三层是那个样子的那么我没有必要抄袭它”。在研究过ORM(过去)或者LINQ(现在)之后,相信许多人对三层的解释和实现更为实际。

#1


这种情况可以使用一个专门的类来组织SQL语句

#2


是的,最好移到sqlserver层

#3


不对,数据访问层

#4


是的

不过也不用太过于苛求 

有的时候太苛求没有必要

适合项目的才是最好的

#5


数据访问层是专门向数据库交互的类,应该保证其可移植性,如果写进数据访问层的话,那就不灵活了

#6


也并不算违背。只是不建议。就像linq本身就封装的不错,但他同时也保留了直接使用sql语句的查询

gridview,treeview一类的控件更是如此,他提供了一些常规的相对不变的一些东西,但是如果你要变化他们,他也同时提供给你变化的机会。

对于n层来说,你可以保留这个,但是不建议调用代码的程序员这么做,除非他实在是特殊需要(net本身也是这么处理的,他保留指针,但通常不用指针,除非你有特别的要求需要你才会声明unsafe去使用他们)

#7


最好不要在表示层见到数据库的东西

#8


任何一套成熟的架构,必然会有一个SQL语句装配器类似的东西.一来是可以适应数据库迁移,二来也会进行一些加密处理,进而防止sql注入.所以,不论是从可移植性的角度还是安全性的角度,直接拼sql都是不可取的,而与你说的"分层"关系却不大

#9


比较赞同8楼的观点,分层的架构各层之间如何传递数据似乎是个值得讨论的问题。

#10


其实应该将问题的重点倒过来看,既然你具体地发现那些“语法”限制了你使用后台数据系统,“管它什么三层不三层的学究气”呢?你就可以慢慢找出这个具体问题的解决之道。具体问题才可以揭穿许多东西,你自己就可以回答“如果三层是那个样子的那么我没有必要抄袭它”。在研究过ORM(过去)或者LINQ(现在)之后,相信许多人对三层的解释和实现更为实际。