我们似乎有一些开发人员认为创建吐出HTML或Javascript代码的存储过程是合法的事情。在我看来,这是对关注点分离模型的最终滥用。做这样的事情的人经常看到人们在做什么?
答案 0 :(得分:4)
Yucko。有几个问题:
答案 1 :(得分:3)
如果这是偶然的,那可能是违反分离关注原则的分层
另一方面,表示从数据库信息生成html的sprocs在某些情况下可能是非常合法和有效的,尤其是。用于高度动态的软编码网站,即网站结构的一部分在数据库中编码,或者数据库本身包含HTML片段...
答案 2 :(得分:2)
可怕的错!只是我的意见。
答案 3 :(得分:1)
Utlimate no-no。除了安全性,低耦合和分层等所有先前的问题之外,当您的公司想要联合内容,将其提供给移动设备(wap等),在基于文本的电子邮件或打印等中使用时,会发生什么。
答案 4 :(得分:1)
我认为问题不在于分离问题,因为sprocs缺乏正确的工具。
此外,任何遇到此代码的人都会遇到问题,而且源代码控制,集成和单元测试将非常困难。
唯一的例外是,如果您的数据库实际存储了在其他地方编辑的Javascript或HTML,例如CMS的一部分。
答案 5 :(得分:1)
我在一家商店的一份工作中幸存下来,整个应用程序发出了所有HTML,幸好使用了对外部CSS / JS的引用。
在项目启动时,Oracle没有支持单独的Web /应用程序服务器 - 所有内容都通过PL / SQL。
有时你只需要使用得到的东西。
话虽如此,我认为没有任何理由可以在任何现代数据库或应用程序架构中从存储过程生成视图级别工件。
答案 6 :(得分:0)
这是一个经典的新手错误。
如果你必须在SP输出中加上标记,你至少应该使用自己的标准化编码,然后让应用程序将其处理成HTML / Javascript。
例如
"<javascriptpopup>[outputuotputoutput]</javascriptpopup>"
或
"<prettyfont>[outputuotputoutput]</prettyfont>"
答案 7 :(得分:0)
不言而喻违反“低耦合,高凝聚力”的原则。
我无法想象他们会如何建议将CSS格式应用于这样的野兽。
答案 8 :(得分:0)
是的,不幸的是,我见过很多人这样做。你是对的:这很卑鄙。
通常,层分离问题是两个相邻层混合的时候 - 您在数据库层中获得业务逻辑,或在业务层中获得表示逻辑。但是这会完全跳过一层,将用户端的展示里程放在它所属的位置!一定是一个难以维护的恐怖。
如果这些恶棍不相信这种理智的请求,你可能会因安全问题而抓住他们。存储过程中的数据库层功能不太可能知道如何转义文本以输出到HTML或JS-string-literal,从而导致非常可能的脚本注入黑客导致XSS攻击。例如,如果用户称自己为“Brian von&lt; script&gt; steal(document.cookie)&lt; / script&gt;”并粗略地连接成存储过程HTML结果......