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

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

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

豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 如何将INTERBASE中的数据导出到EXCEL文件中?! 关于C# 需要server2003企业中文版(激活的)地址! sql查询问题 update 的问题 急!IIS连接不上 装上JDataConnection Server之后,在数据源ODBC中的驱动程序列表中没有JDBC驱动算不算问题,高分求解! 短消息服务提供商(SP)程序问题 activeX控件问题,急盼高手帮助! 请教八数码难题的解法! 如果一个dll,在它里面有一个窗口,而有一个函数是这个窗体类的一个函数,那么如果在使用这个dll文件中的这个函数。 谁能给一个测试是否是EMAIL的函数?急! 如何实现关键字查询? 只能让家里的电视出现更多的台,比如解码器什么的! 急问:那位了解 sys/wait.h ,它的功能是什么? 求MICROSOFT VISUAL STUDIO.NET 2002 中文企业版,2003不要,谢谢~ saucer(思归)在吗?有问题请教! 哪里有C++ Builder 下载的。 TTrayIcon中的图标颜色只能显示16色的吗? HELP!!!XML怎么写成物理文件到本地? 这是为什么呀?电脑高手请进。。。 也说技术人员创业 高分:虚拟主机问题 快被OVERLAY搞死了,急救 中了“盗贼”木马,如何删除? 请网络高手来看看这个问题,给我点提示和建议?急急急 汉字在exe 文件的十六进制 能否 转换得来? 气死人了,在jbuilder8中被logic:iterate搞死了,累,急救 pb数据窗UPDATE的怪问题!很怪!!! 配置问题求救! 请问Access中可以用select case ........when else end的函数吗? 一定要把AutoPostBack设定成true才能响应事件? 但是那样动态生成的控件又都没了…… 急 哪位知道哪有OpenGL高级编程的培训 短消息服务提供商(SP)程序问题 那里能弄到解码器~~~~~~~~~~~~~~~ 马上就要毕业了,请先辈们指点迷津!!! 安装 Duwamish 7.0 和 PetShop 3.0 时的问题? 一个二维数组的问题,请指教 tdbgrid 锁定行,使改行不可编辑 能否实现这样的功能:如果是A登陆,则可以看见一个按钮a;如果不是A登陆,则按钮a不可见。 本人查看过往的薪水调查的贴子,看到大多数人都在贫困线(2K)下,这JSP技术已经没什么钱途了.转向吧! rm格式的文件不能正常播放用什么软件修复呢? 请问用java编好的软件,如何打包发布呀?急~~~ 怎样在对话框里设置背景图片? 帮帮我!我弄了好久拉! 请解决了clientdataset的filter中使用like过滤中文单汉字的高手进来解决一下 如何禁止菜单栏“窗口”项中的窗口列表 如何用xml显示,从数据库图像字段中导出来的图片信息,显示为图片!代码如下... 紧急求助:CSocket的问题 请教:程序先往一word模板中写入数据,word显示出来后,不允许修改,怎么能实现?(在线等待) 可不可以告诉我操作系统里的LPVOID当我在C#中调用API时应转化为哪个类型? ‘安全隐患’ 怎么翻译成英语啊 我中文ai和an老是读不清,这两音分别怎么发音?跪求帮助,感激不尽 有一质量分布均匀的物体,漂浮在水面上,有三分之一的体积露出水面,将露出水面部分切去后,剩余浸在水中部分将?为什么? 屈原哪里爱国,为什么要投江最好短一点 我们为什么要爱国检测卷这篇文章主要讲了什么 好难的微积分呀. 高等数学中的微积分好难啊,请提供好的学法. related videos是什么意思 如何对待父母的啰嗦唠叨? 初三英语改句式,Why Lao She's plays turned into wonderful films?(改为主动语态)原句打错了,是“Why are Lao She's plays turned into wonderful films?(改为主动语态)” 几道六年级英语句型转换题,句型转换(对画线部分提问):1.She often goes to the supermarket.【对often提问】________________________________________________2.I drink much Coke at home.【对much提问】__________________________ 斯诺登:揭发情报机构监控丑闻有利于社朴槿惠时隔39年访法 会晤奥朗德磋商罗姆尼:奥巴马医保网站问题频出 有损菅义伟:处理福岛核电站事故应加强政府新书称奥巴马曾向幕僚吹嘘:我擅长杀人印度北部村落遭武装分子袭击 造成7死埃及前总统穆尔西到达受审地点 将接受法两名记者在马里遇害 遗体遍布弹孔俄总统普京将访问越南 适逢俄越潜艇交喵星人出没!走进日本“猫岛”田代岛(埃及前总统穆尔西到达受审地点 将接受探究人类历史发展 天狼星和人类竟有重黑莓将推第二款Android手机 代HTC One X9再曝谍照:“多下美国女孩自曝:我被外星人逼迫生下蓝婴承德围场殡仪馆迁建工程正在做前期准备【问答】性功能障碍答疑第三种旅行方式崛起!“旅行帮”有何资在线帮你修手机 魅族mSupport“少林足球”训练基地成立,拥有上百学孩子早餐应该吃什么?看完99%的父母圈内人曝中超颁奖内幕,崔永元:早看出死亡名单掌绝1949我来自未来不朽圣尊无限传奇天堂ol铁枪杨铁芯世外桃源空间三国之妖才弑神者之节能主义者网游之绝世无双中国鳄鱼湖旅游杨凌旅游半山亭旅游祝圣寺旅游凤凰山旅游好森沟旅游梅园新村纪念馆旅游七百弄国家地质公园旅游金海雪山旅游湖北大学旅游茫崖行委旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘