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

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

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

快播CEO王欣:我不做内容,只钻技术! EMC中国凭什么说营收5年再增5倍? HTML5:或助三星Tizen 2.0逆袭主流移动OS 互联网巨头公司为何联合开发WebKit? 继Windows Blue:WP8升级或今年圣诞前到来 中国黑客部队攻击美国23家天然气公司 [CTO俱乐部第93期] 移动应用研发及位置在线平台架构分享 TeamToy——开源的团队高效协作工具 2013年数据中心发展的五个关键因素 可穿戴式设备:高调的Google 低调的苹果 由CloudFlare宕机引发的思考 传iWatch年内推出 或成苹果救命稻草 Twitter开源其Java消息流库Hosebird Client API正在崛起 渐成企业核心业务 HTML5会是Firefox OS的生门还是死门? 三星的成功并非偶然,而是专业 避免恶意软件 日本政府警告用户慎用Google Play 曝光:诺基亚要推出新手机系统Meltemi 为研发iWatch,Jony Ive订购大量Nike腕表 APP运营人的一天:宫爆老奶奶产品运营 新传感器:三星Galaxy S4或将支持眼球追踪 IBM发布基于OpenStack的服务 从Windows Server 2012云创益大赛看国内行业私有云发展 张小龙谈微信:你可能不知道的9件事 源代码管理十诫 游戏手柄也能编程 极客打造不用键盘输入的IDE 开源不只是程序员的专利 政府也可以 开源搜索Elasticsearch:PB级数据的快速搜索 月下载量已达20万次 乐视网联手富士康推超级电视 欲颠覆传统盈利/营销模式 IBM 2012IT实践达人赛圆满落幕 宣布成立新兴技术大学 对比MapReduce 流处理框架没有所谓的查询层 简单的问题,关于不让一个button的ONCLICK事件重复执行!,请看详细问题: 如何在ActiveX中创建不同形状的按钮?在线等待 各位前辈,请问如何在DataGrid里面实现文件下载功能? coolingpipe(冷箫轻笛)接分啦... 一方有难,八方支援,我有疑难,你能否来? Modem之间建立无法建立连接,据说跟电平有关? Oracle中字段为Long的数值在Java中如何保存? 100分求解!先答先得! ■■■北京真是个烂地方,整天就为一些租房子、自行车被偷之类的事情操心,真是没劲,同意者请进!!! Modem之间建立无法建立连接,据说跟电平有关? 面向对象分析 数据库是oracle的后台ejb如何编译?请给个详细一些的说明或者文章,谢谢谢谢 烦人的问题(该问题在VBA区也没解决),怎样在word中为自定义按钮动态制定自定义的图标? 怎样将用Graphics类画的图保存为jpeg文件格式(在线等候)谢谢 想和大家一起来讨论 VC中的快捷操作! 请奉献!!!!! oracle字符集问题,在线等待,解决后马上结帐! 谁能告诉我CJLibrary是一个什么样的类库?以及他的功能?谢谢!!! 在水晶报表中如何调用存贮过程?在线等!!! Modem之间建立无法建立连接,据说跟电平有关? 寻书城管理软件系统 提示 一个很重要又很常见的问题。 请问有什么调试工具来调试asp程序 一方有难,八方支援,我有疑难,你能否来? 请问使用STL如何将字符串变成大写 OOAD 我对这段代码很困惑!!不知为何出错,请大虾指点一二!!! SQL Server数据库中支持的数据表的最大数是多少? 有会用SDL(Simple DirectMedia Layer)的么? 如何重新启动电脑啊 ooad 有人对xml文档及schema映射为数据库的记录和表作过研究吗? 窗体启动时,Load之后是什么事件 安装好了J2EESDK1。4后怎样运行JAVA程序? 有关DBGrid的问题 IBM的硬盘是不是很菜!惨啊!奉劝大家多多备份,不要买IBM的盘 合格的程序员应该具备哪些知识和技能? 在报表中如何显示出来----共n页/第几页 急寻广州深圳两地图书城管理软件公司 用jdk写出的application里的汉字很难看,有没有解决的办法? 面向对象分析与设计 那位有<<java大学教程>>的光盘,可不可以把光盘上的附录部分发给我!(100分) 关于win2000中的odbc的问题 vfw 软件工程师和程序员有什么不同? 一方有难,八方支援,我有疑难,你能否来? 唉。 发现有人还在吃糠。。。。痛心ing.............. 为什么我连不到mysql? 有什么比做ghost更好的硬盘数据备份方法? 请教:在dataGrid 中如何根据行值的不同,设置不同的颜色 一般菜的问题,不知道你遇到过没有,请大家过来看一下 一道高中物理题 ,与动量守恒有关A球的质量为MA,以某一速度沿光滑水平面向静止的B球运动,B球的质量为MB.A与B发生正碰,碰撞过程中机械能不损失,当B球质量取不同值时,则碰撞后 A.MB=MA时,B球 除酸外还有什么物质能在水中电离出H+原题是:某无色溶液滴入紫色石蕊试液显红色,该溶液一定是酸溶液.此话是否正确. 氯化亚铁和氢氧化亚铁如何相互转换? 声音如何转换成数字信号的?手机之所以能把声音传播到千里之外是因为里面有种叫做“数模转换器”的东西可是我想知道数模转换器到底是怎么把声音这种模拟信号转化成数字信号的声音至 急需2009学年上海高一化学练习册P2 第3大题答案说明为什么推断正确, 氯化亚铁加什么可以变成氢氧化亚铁 初中数学中2次根式被开方数不含能开得近的因式或因数是怎样开得 例如根号24×根号27过程写出来 求 应用题一词中应读几声 -120乘以155乘以155乘以155+8500万乘以0.2+25亿乘以0.02=多少啊 数字信号怎么转化为声音信号 五年级上册语文第七单元口语交际不要乱发 题目是不忘国耻振兴中华 氢氧化亚铁如何转化为氯化亚铁Fe(OH)2+?=FeCl2不是说+2价铁化合物反应后会变+3价吗 将数字信号转换成图像是什么技术主要是把声纳装置得到的信号处理成看的懂的图像 苏教版六年级下册语文评价手册夹竹桃最后一题的题目 125乘以8和25乘以4 max232的作用是什么? 如图所示水平光滑导轨宽和弹簧自然长度均为d,m2的左边有一固定挡板,m1由图示位置释放,当m1与m2相距最近时m1的速度为v1,则在以后的运动过程中A m1的最小速度是0 B m1的最小速度是(m1-m2/m1+m2 翻译成英文:太极拳是一门中国武术 max232的作用 一分钟速算能不能帮助我的孩子提高成绩啊? 太极拳(功夫)是怎么发明的! max232和max3232有甚么区别除了供电 一分钟速算对于孩子难不难学? 太极拳和其他武术我17岁,男,想学武术,各位说是练太极拳好还是练跆拳道或散打,我不急于求成的练太极拳要什么武术基础吗?列如马步,韧带之类 求能在水中电离的阳离子出了常见的金属量离子,NH4和H之外的阳离子,有机物的也可以, 跪求氢氧化亚铁和氯化亚铁之间的转化反应方程式? △+□=33 ○+□=39 △+○=34 求△= ○= □= 如何培养小孩的心算能力? 氯化亚铁转变为氢氧化亚铁的离子方程式还有氯化铁转变为氢氧化铁的离子方程式,两个都回答的加分。 蛋白质是高分子化合物么 宁波幼儿速算(心算)哪里好? 怎样培养孩子的观察能力 33分之13=39÷() 五年级语文上册第七单元口语交际作文 如何培养孩子的观察能力? 33到39英语 某一方程的通解为y=e^(-∫1\xdx)] · ∫(e^∫1\xdx)dx=e^(-lnx) · ∫(e^lnx)dx为什么在变换过程中1\x的不定积分变为lnx,而不是ln|x|? 语文五年级上册第八单元口语交际200字 蛋白质是由什么互相结合形成的有机高分子化合物 2014年12月英语六级成绩什么时候出来 语文五年级上册第八单元口语交际怎么写 尽量200字以内 1.如图所示,小强同学用压强计研究“液体内部压强与深度的关系”.(1)在实验中,小强把探头直接放到水杯底部,这时A处的橡皮管与玻璃管互相脱开,他观察玻璃管中的液体液面 ;(填“相 2014年12月六级成绩什么时候公布 五年级上册语文第三单元口语交际50字左右只限今天1点 常熟市第一中学 是什么制度要交多少钱,是如何与初二的一起考 2009年12月大学英语六级成绩什么时候公布? 孩子做作业慢,咋办 “太极”如何翻译? 英语翻译tapping screw pan head (din 7981) PH drive materil c1022 size 3.5x9.5mm ,4.2x9.5mm ,4.213mm flat countersunk head tapping screw (din 7982) PH drive material c1008 size 3.2x13mm dry wall screw 3.5x20-25-30-35-40-45-50mm material c1018 PH d 硫化亚铁转化成氢硫酸方程式 常熟市一中 有秋游吗?(2010年)去哪啊? 把多项式7xy²-2x²y+cy³-ax³重新排列(1)按X的升幂排列 (2)按X的降幂排列 (3)按Y的降幂排列 (4)按Y的升幂排列 09年12月的英语六级成绩具体公布时间? 17-18两题 一道高中物理有关动量守恒的题目两个质量均为120KG的小船静止在水面上,相距10M,并且钢绳连接.一个质量为60KG的人在船头以恒力F拉绳,不计水的阻力.(设人在甲船上)(1)两船相遇时,两船各行进 2014年12月英语六级答案汇总 成绩查询时间什么时候 最快者和答案最佳者必采纳 一道高中物理动量守恒题目如图1所示,A、B两物体质量比为1:2.原来静止在平板小车C上,A、B之间有一根被压缩了的弹簧,A、B与车面间的动摩擦因数之比为2:1,平板小车C与地面之间的摩擦不计, 碳酸钙在水中电离出的阴离子是什么? 问问首页我妹妹明天就要市一中分班考了,她想让我问问现在语文考的是不是书本上的内容,常熟市市一中
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘