说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

编写代码?先熟悉一下编程语言界限吧!

HTML文档下载 WORD文档下载 PDF文档下载
把每个编程语言当作是一个集合,从语言设计到编程格式,它们一定是含有交集的。为了解决因“交集”而带来的代码编程错误,文中详细分析了HTML、CSS、JavaScript、Server-side Languages和SQL之间所存在怎样的界限。

本文作者Cory House是一个软件开发者,笃信清洁代码和务实开发。最近他总结了不同的编程语言之间存在的界限规则,他还认为不了解编程语言之间存在的界线无异于选择错误的开发工具,要想简化、加快软件开发过程,了解语言之间的异同是必不可少的。(以下是编译内容)

如今开发者有很多种途径去解决编程问题,不管是利用大量的类库还是各种各样的技术工具。当然了,随便选择一些错误的工具导致的代码错误也是工作里最头疼的事情。另外总结出,不了解工具与工具之间、语言与语言之间的界限所带来的风险和选错工具带来的风险是一样的。下面这几个常用的构建Web App的工具,每一个都有特定的使用目的。

  • HTML:为编写的内容提供语义标记。
  • CSS:将设计风格从标记里区分出来。 
  • JavaScript:提供表现行为。
  • Server-side Languages:管理商业逻辑。
  • SQL:对RDBMS数据存取和数据操作有很大的帮助。

下面就来分析一下不同的技术之间存在哪些界限和互动点,以及它们是怎样给开发者在工作当中制造麻烦的。

HTML和JavaScript之间的界限

尽量避免将HTML放入JavaScript字符串里,不然出现的结果可能会像这样:


值得注意的是,如何在for循环语句下面生成一个HTML行,然后设置成一个称之为carRow的变量。将HTML放入JavaScript字符串里,这样就能更灵活的将HTLM插入在网页上,但应该标记为本地 HTML。当选择一个模板解决方案的时候,需要寻找一个简单的、较旧的HTML作为模板来源。KnockoutJS和AngularJS模板都是使用这一方法的。

如果你想把HTML储存在.js文件里的话,必须三思而后行,因为JavaScript是典型的用来储存标记的错误工具——也就是说,保持本土化没什么意义可言了(代码颜色、语法检查等等)。

另一方面,避免将复杂的JavaScript放在HTML里的DOM基础上:


有的人直接把JavaScript放在HTML里面,但是这种通过直接插入行为到标记里的方法使得问题变得更为混淆,同时还消除了缓存和重复使用的机会。

这种低调的JavaScript行为的确降低了上述的问题出现几率,但是新的框架像Knockout和Angular是可以将JavaScript推到HTML标记里的。不过在HTML里简单声明一下标记还是有好处的,因为当绑定比较简单的时候标记很容易被发现,并具有可读性。但要小心,涉及到很多简单声明绑定的时候,JavaScript属于.js文件,HTML属于.html文件。

HTML和SQL之间的界限 

这里有两个简单的案例:忽略了数据和HTML之间的重要界限所导致的现象。


关系型数据库应该包含原始规范化数据,这样的数据也是多用途的。因此,存储HTML在DB或注入HTML在查询结果里,如上所示都是有问题的。它将整个演示和数据存储在一起使得重复使用变得很困难。

内容管理系统是一个常见的问题,在这里用户必须能够存储和管理在数据库里的HTML。就相当于利用数据重复使用和数据规范化来换取最终用户管理权。除此之外,应该最大限度的避免混合表示和混合数据,因为它们会分离关注点,必须第一时间处理掉。

HTML和CSS之间的界限

HTML和CSS 之间的“过节”相对简单,只要避免做这样的事就行了:


人们经常将设计风格放入线上的HTML里,但是这样会把语义标记和风格搞混淆。

分离关注点的同时还消除了缓存和重复使用CSS的机会。DRY原理在这里比较适用:如果你想把一个风格使用在多个点上,那就需要事先声明这个风格是在一个单独的样式表里的。

SQL和Server-side Language之间的界限

利用一个服务器端语言来创建高层次的动态SQL是很容易的,就像使用C#字符串生成SQL语句一样简单,但是存储的程序和ORM通常会提供一个更安全、更优雅的方法来生成动态的SQL。编写动态SQL字符串的同时也打开了通往“SQL资料隐码攻击漏洞”的大门,并且取消了DBA管理和提高查询性能的机会。含有SQL字符串的App在运行时也存在很高的风险,尤其是当模式发生变化的时候。ORM向数据库提供增强型的类型接口,可是当模式不能够和现有的数据库查询同步的时候,这些数据库就无法编译了。

JavaScript和Server-side Language之间的界限

在服务器上编写动态JavaScript字符串,会出现这样的情况:


这是误用工具所出现的最常见的现象:使用一个Server-side Language生成动态的JavaScript,大多数情况下JavaScript应该保留在.js文件里,从服务器里返还出来的JSON可以提供更多的活力。

所以在你很投入的写出下一行代码的时候,最好考虑一下你离这些编程语言的边界是不是很近?或者说靠哪一边更近?热爱清洁代码的程序员应该努力保持本地化:文件扩展名在技术方面应该是一个很好的指示器。

保持本地化

本地化的重要性不只是针对于JavaScript,当你发现在保持本地化的同时没什么取舍可选的时候,你只能和字符串较劲了。不过这其中的底线是,避免通过字符串把一种编程语言编写在另一种编程语言或者是格式里。不过目前在比较流行的编程语言里,解决这样的问题首先要考虑到动态化,并利用类库来生成这样的编程格式。要想通过字符串创造这么多东西就需要程序员同时理解两种语言之间的界限。所以,一旦你发现一个文件里有两种编程语言的话,最好先考虑如何使用更好的、更特殊的方法去消除其中的一个编程语言。                                                                     (编译/薛梁  校审/付江)

原文:BitNative

从SendCloud到搜狐云 扎克伯格的败笔?Facebook Home可能无家可归 走进eico design,仰视设计师 乔布斯顾问承认苹果的命名糟透了 罗永浩:一百万年薪!招聘软件研发总监 开源的:helios移动应用后端服务框架 IE11将支持WebGL 或将OpenGL映射到DirectX 基于云端的3D渲染和协作平台Lagoa:仅需一个浏览器 大数据提速,IBM 推面向Hadoop的PureData大数据机 游戏开发者的盛宴:2013 CocoaChina春季开发者大会强势启动 开放还是关闭API?CIO做决策前应考虑的六个建议 Python 2.7.4发布,更快的IO模块 如何拒绝沦为服务的商品,并收回对数据的绝对掌控 最阴险的代码?尽在“邪恶”的Underhanded C Facebook Home出阴招:Social皮,Android心 国内最火的五款HTML5前端开发框架 TIOBE 2013年4月编程语言排行榜:Objective-C四年来排名首次下滑 MeeGo复活!Sailfish OS智能手机 SDK发布 10亿美金!传闻谷歌要收购WhatsApp 从打造国内最大的OpenStack公有云开始 展望HBase的未来 你的数据库安全吗?CryptDB数据库软件可查询加密的SQL数据库 收藏!斯坦福Andrew Ng教授“机器学习”26篇教程全译 美国云计算价格战爆发 王寒:12岁儿童,该怎样开始iOS开发? 陈昊芝:腾讯!让我说你什么好? Top Paid与Top Grossing定价策略的差异 Android版百度云推送正式发布 为何开发者应推动公司开源? 从AppGratis被下架说起,苹果或将再次付出代价 58同城的“烦恼”——8K月薪安全工程师引发的入侵 哪位能提供一个图书管理的VB源码给我参考? yzqb()发工资了47分 请教一个问题,编译不通过,不知是什么错误。 帮帮忙!神经网络 vb 中打印机如何检测? 假如用户正在使用别的软件,如何自动使我的程序获得焦点 批量转移数据 SQL 斑竹呀急,快帮帮我! 想用ADO连接internet上服务器中的database,怎么动态建立间接网上数据库的DSN? 我的Web站点为什么没有安全性? 请问那些捌角人小图片如何做呀? 我也要一份《全套国标软件设计文档》 好人们,谁也发给我一个吧! 如何得到对话框在桌面的位置 紧急求救!编译时的错误! 改变Edit控件后出现字符重叠显现如何解决? 关于DBASE,CLIPPER,FOXPRO,VFP的历史发展 请问那些捌角图片如何做呀? 谁会刻光盘!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! lazywolf(二代) 有没有提供几何图形模板的类(如正方形和圆形)? typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);是定义函数指针吗?为什么这样定义呢? 如何创建vector数组!我这些不对static Vector report[8]=new Vector()[8];高手指点me:) 如何画一个透明的Rectangle VC中修改字体的问题 比你更急!ASP。NET中打开文件问题? HTTP POST QUESTION????? delphi中的pop3控件怎么取得带附件的邮件的正文呀? J2EE随带文档的中文版本哪里有下载??? chr 函数问题 弟兄们,我明天开始要回来了,回到这个阵线了 如何退出双重循环 帮兄弟一把,一个小问题! ADO的连接 高分求解,如何取得默认打印机支持的纸张类型? 用deamweaver ultradev 做的asp怎么修改可以与数据库连接?? 时间问题 ADO连接问题 如何设置串口的流量设置,?设置为无. 请问怎么给JTabPane上各个JPanel(如:JPanel1,JPanel2)使用setMnemonic() 找不到确切哪一天的记录? 各位高手,为什么我在用NMUDP发送数据时当接收端程序没有启动的时候总是提示Stream Write Error,是什么原因,怎么才能让这个错误提示不出现 《机械原理》课有感 大哥 怎么在网上查到这的硬盘是不是水货好像输一个序列号就可以是不是 有谁能提供计算机及应用专业的本科毕业论文,最好是数据库方面的? 注册crystal report 都需要哪些.dll呢 如何能够同时DownLoad多个文件,就像OutLook的文件添附功能? 从sql serevre 6.5 升级到 sql server 2000后 原先的中文字段为何是乱码?急! 怎样用select下拉菜单的双击事件实现页面的提交?? 圣诞节要到了,mm 的命令也到了,要我准备好money,大家帮我出出注意啊~~~~~~~~ 请教各位jsp高手 office2000英文版无法uninstall 下列现象中,物体的运动状态没有改变的是( )A.守门员把射来的足球抱住B.从飞机上投下的救灾物资C.物体在平直斜面上匀速下滑D.汽车在弯路上匀速转弯 铜合金的密度是多少啊? 为什么饮用含有钙离子镁离子含量高的硬水达不到补钙镁的效果而且是不正确的,喝硬水对身体有害吗? 实验室同学们要配置一定溶质质量分数的氯化钙溶液实验室里同学们要配制一定溶质质量分数的氯化钙溶液.药品柜中可供选择的药品只有氢氧化钙、氧化钙、碳酸钙和硝酸钙四种固体及一定 求铜合金的密度 一个带孔的铜球,体积为80立方厘米,质量为267g,若用它来盛水,最多能盛多少? 水垢对身体有危害吗 硬水和软水的区别. 我们喝的水是硬水还是软水?是硬水对人体好还是软水好? 一个带孔的铜球,体积是80厘米的3次方,质量是267克,若用它盛水,至少能盛多少克 氢氧化钙溶液与氯化钙溶液为什么会生产氢氧化钙 喝硬水里的氧气对人体有什么作用? 一个带孔的铁球,体积为80立方厘米,质量为267克,若用它装水,最多能装多少水? 硬水易生水垢,用蒸馏的方法能使硬水软化这句话对吗? 把5g食盐溶解在120g水中,所得溶液中溶质的质量分数是多少? 补钙的途径1.经常饮用钙离子含量高的硬水2.大量补充维生素D.为什么第一个不正确?说明理由. 矿泉水是硬水吗?如怡宝那些.在知道搜索看到许多不同的答案,请给一个合理的答案和令人信服理由. 硬水长期饮用为何对身体不好? 用同样材质的铜制成两个零件.一个体积是15立方厘米,重133.5克.另一个体积是20立方厘米,重多少 矿泉水 硬水为什么是软水呢```矿泉水里面不是也有钙和镁吗 2.把5g食盐溶解在120g水中,所得溶液中溶质的质量分数是多少?急!帮帮忙! 用同样材质的铜质制成的两个零件.一个体积15立方厘米,重133.5克.另一个体积20立方厘米,重多少克? 用含钙、镁离子较多的硬水洗衣服时,用肥皂更好还是洗衣粉更好哦? 有一金铜合金工艺品,体积为3立方分米,质量为37.1千克.求此工艺品中所含金的质量.(p金=19.3×10³千克/立方米,p铜=8.9×10³千克/立方米) 用同样材质的铜加工成两个零件.一个体积为15立方厘米,重133.5克 ; 另一个体积为20立方厘米,重多少千克 矿泉水算是硬水吗? 有一块体积为1.8立方分米的金铜合金,质量为20千克,问:含金百分比. 诉求答案 用同样材质的铜制成的两个零件.一个体积20立方厘米,重178;另一个体积26立方厘米,重多少克? 向一定量的未知浓度的氯化钙溶液中,加入硝酸银溶液至完全沉淀为止,结果生成的溶液质量与所加入的硝酸银溶液的质量相等,求氯化钙溶液溶质质量分数? 一件标称纯金的工艺品,其质量是100g,体积为6cm立方,他是否由纯金制成?(p金=19.3*1.立方kg/m立方) 有两个同样材质的零件,一个零件重1068克,体积是120立方厘米,另一个零件重756.5克,体积是多少立方厘米 向一价金属碘化物中加AgNO3溶液,到沉淀完全,生成硝酸盐质量是原碘化物质量,求原硝酸银质量分数向一价金属的碘化物中逐滴滴加硝酸银溶液,直到沉淀完全为止,已知生成的硝酸盐溶液质量等 金铜合金工艺品,体积为3dm3,质量为37.1KG.求所含金的质量?(密度金=19.3X1000千克每立方米)铜=8.9X1000千克每立方米 生活中的自来水是硬水还是软水? 硝酸银溶液中加HCI至沉淀完全反映,将沉淀干燥,质量与盐酸质量相等,盐酸质量分数是?请说明解题思路或步骤 喝硬水为什么不能补钙? 含有____的水叫做硬水,含有____的水叫软水.鉴别硬水和软水的方法有____(有——现象的水叫软水)和____法(无——现象的水叫软水)鉴别硬水和软水的方法有_________,生活中有什么方法使硬水 有NaCl.CaCl2.AlCl3三种溶液,溶质的物质的量相等若分别与足量的硝酸银溶液反应,若生成的沉淀的质量相等有NaCl.CaCl2.AlCl3三种溶液,溶质的物质的量相等若分别与足量的硝酸银溶液反应,则生成沉 硬水的钙镁离子对人有害还是能补钙? 有关水的性质硬水转化为软水的方法?——————(生活常用)————(实验室用)水电解是正极生成( )负极( )两者H :O 体积之比( ) 质量H:O( )2.从物质类别的角度看水属于 有40g质量分数为5%的%的氯化钙溶液,若将其溶质的质量分数变为10%,应采用的方法是A.把溶剂蒸发掉一半B.加入40g质量分数为15%的氯化钙溶液C.把溶剂蒸发掉10g .要依据的不要只有答案 硬水的危害? 什么是硬水?什么是软水?为什么硬水不好?喝硬水有什么危害? 10%氯化钙溶液与10%碳酸钠溶液完全反应,生成5g沉淀.蒸发45g水后,得到溶液的质量分数是多少 长期饮用硬水的坏处只知道长期饮用软水对身体不好,会缺乏矿物质;那么长期饮用硬水会有怎样的坏处啊?这样岂不是喝什么水都不行了吗? 将80mlNaOH溶液倒入120ml的HCl中,所得溶液的pH为2,若选用NaOH溶液及HCl浓度相同,求其物质的量浓度说下理由,谢谢 配制一定的溶质质量分数的氯化钙溶液需要哪些器材? 长期饮用硬水对人体有什么危害? 某含0.8gNaOH的NaOH溶液恰好与40mL某浓度的盐酸完全中和.则该盐酸中HCl的物质的量浓度为多少 初三物理力学试题 长期饮用硬水会有什么危害? 配置一定物质的量浓度的NAOH标准溶液,用于测定未知浓度的HCL为什么“定容后,溶液页面最高点与刻度线处在同一水平面上”,会使所测HCL的浓度偏低? 初三物理题 力学重10N的铁桶可盛水100N,用这只桶在井中提水,但盛满水的桶还未露出水面时,提桶的力约是A.10N B 90 C 100 D .110谢谢你们喔 我很需要详细说明物理学不好啊,麻烦你们把思路都说 长期喝硬水对身体对什么危害,水该怎么处理来改变水质 一块合金中金和银的比是2:3,现在再加入6克银,共得合金36克,问新合金中金和银比是多少?算式 俯卧撑是一项常见的体育健身活动.如图所示是小明同学做俯卧撑的示意图.小明重600N,1min钟内做俯卧撑30个,每做一次肩膀升高50cm.小明身体可视为杠杆,O为支点,A'为重心,0A=1m,B到O点的距离OB=1.5M 判断下列说法是否正确?为什么?在100g水中溶解20g食盐,所得食盐水中溶质的质量分数为20%.( )判断下列说法是否正确?在100g水中溶解20g食盐,所得食盐水中溶质的质量分数为20%.( ) (2)碳酸钙是一种廉价高钙补钙剂,虽然碳酸钙难溶于水,但服用后可转化为可溶性钙盐被人体吸收,其中的道理是(用化学方程式表示):__________________ .因此,碳酸钙在医疗上还可以用来治疗 . 如图是搬运工人用滑轮组将仓库中的货物沿水平轨道拉出的示意图.已知货物的质量为600kg,所受轨道的摩擦力为其重力的0.1倍,滑轮组的机械效率为75%.若人以0.5m/s的速度匀速前行,经100s将货物 实验:用过滤法分离粗盐中难溶解杂质,为什么过滤时溶液在滤纸上不下漏 碳酸钙可以做补钙剂吗
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn