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

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

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

Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 Android开发之Java集合类性能分析 Android开发之Java虚拟机原理和内存分配 Android开发之Java基础系列教程目录 Android Theme主题样式开发注意点 Android 3.0开发用的平板推荐 android.resource://这个Uri你知道吗 ADT插件的10.0.1必须要Eclipse 3.5才能升级 Android线程优先级设置方法 Android Zip文件解压缩代码 Android开发之设置断点单步调试 Android裁剪图片最简单方法 Android平台待开发软件列表 Android开发知识-3月13日总结 Android平板开发注意点 Android 3.0自带的天气预报例子代码 Loader和Fragment使用示例代码 LoaderManager - Android 3.0新特性 帮助ADT改进DDMS中的Logcat中文乱码问题 Fragment API将兼容Android 1.6到3.0 通过Linux Shell实现Android横竖屏切换 Android高手应该精通哪些内容? Android 2.2开始resources.arsc有改变 分析你的Android ANR错误 API Level对照表,更新至2.3.3 ProcessDialog结合Thread处理耗时操作 Fragment示例代码 DialogFragment示例代码 到底要怎样学 新手请教问题 我的安装老是不能成功,那一位大虾能告诉我,谢了 各位大虾,谁能给我提供,匿名发送邮件的程序代码啊。。。。 那位打下知道有什么针对BMP图像的压缩算法? 怎样使WAV播放的幅度表达出来?象WINDOWs的录音机显示一致? 窗口的问题(稍后加分,100分) 大家是如何解决数据库平台无关性的问题的? 呦,阿紫,你真的改名啦,红袖添香夜读书的小乖乖,太长了,你还当斑竹吗? vb开发进程?Hook技术? 所谓的基础的是什么 识别上网状态问题,请教各位大虾。 再问:请问可以在applet中使用MenuBar吗?(昨天的已经给分了) 统计一下win2000下可以玩的游戏 *.chm文件能作在线帮助吗?在窗体的helpfile、和helpcontext如何设置??? 如何根据列名用object来取出字段,急!!!! 关于箭头在数据窗口移动的问题? 再问个菜鸟问题,showmodaldialog的title怎样控制 javascript中如何取整? ALT和MFC的区别是什么?? 试用DELPHI6,BUG太多了! 我是新手,请问在delphi5中如何建库(orcle和sybase)? 问一个比较弱智的问题 js文件里如何使用另一个js文件里的函数30? 哪位大虾知道可以在哪里下载mpeg-1的codec,谁先告诉有效地址谁先得分!(不给分是小狗!) 可能很菜的问题,送分的问题!! 一个关于CDaoTableDefInfo的问题 ado的问题??求救!!!高分!!! 有关代码重用的问题,对Form的继承。 一个关于CString.Format的问题 学习编程时学图算法怎么学好? 一个很简单的CREATE TABLE语句为什么出错呢?向大家请教! jbuilder5运行需要最低配置 ,傻傻的问 Delphi6的盗版已经到了@_@ 喂,为什么我提问只能给最多37分,原先可比这要多的多 一个关于派生类的问题 关于页面关闭的问题 用new JTalbe(10, 20)创建了一个table,如何设置该table列(column)的宽度 请教一个关于用VC6开发outlook\exchange的问题。急!急! 时间服务器 请问一下,用DBM,如果用户注册的数量多了以后,程序的速度很一般的文本速度比较哪个快 纯数学问题:如何求模逆元? VB中实现进程间通信的方法?VB中的CallWindowProc的用法?VB中如何发送自定义的消息? 请问哪里能免费下载BCB5?下载多长时间没有关系,只要能够正确使用就可以了。 怎样得知CListCtrl中当前选项? 我想从WINME中自带的一个驱动程序提取出来在WIN97中安装,请问应如何做? 菜问题(2) 请教:为何数据库数据无法在网页上显示? CEditView 一定要override onChange function(ON_CONTROL_REFLECT(EN_CHANGE, OnChange))????;否则input 时不我待会错??? 请教:不通过页面,用VB如何得知来访者的IP? 如何将vcd转化为real的格式???????????急!!!!!!!!!!!!!! 实验小学六年级男生与女生的人数的比为7:5,已知男生比女生多40人,男女生各多少人 成功中学七年级(1)、(2)、(3)班向希望小学共捐书385本,2班捐书的本书是1班的0.75倍,一班与3班的捐书成功中学7年级1、2、3班向希望小学那个捐书385本,2班捐书的本书是1班的0.75倍,一班与3 父亲的年龄是聪聪的9倍,母亲的年龄是聪聪的7.5倍,父亲弊母亲的6岁.聪聪今年几 实验小学的女生人数比全校总人数的2/5多256人女生人数是男生的7/8求该校一共多少人? 成功中学7年级1、2、3班向希望小学那个捐书385本,2班捐书的本书是1班的0.75倍,一班与3班的捐书之比为6:7数学老师正在黑板上抄上述题目,还没抄完,校长便叫他去接个电话,现在请你替老师把未 下面图(1)是某市实验小学四五六年级在希望工程自愿捐款活动中学生捐款情况统计图,图(2)是该小学四五六年级分布图,已知三个年级共有学生950人,图(1):人均捐款数每元:四年级5元; 实验小学六年级的女生人数占全年级的48.75%,如果男生人数比女生人数多12人,共有多少人? 聪聪明明从家相对出发,聪聪的速度15分之1千米分,明明速度是12分之1千米分,15分钟后他们两家相距多少 . 四年级同学为"希望工程"捐款,1班,2班,3班平均每班捐25元,2班,3班,4班平均每班捐28元,已知一班捐款26元,求4班捐款多少元 实验小学六年级的男生比女生多20人,女生人数比男生少五分之一.六年级男生多少人 聪聪行走的路程比明明多三分之二,明明用的时间比聪聪多五分之二.求聪聪与明明的速度比. 小学二年级四个班的同学为希望工程捐款,一班,二班,三班平均每班捐款24元,二班,三班,四班,平均每班捐款26元,已知一班捐款22元,那么四班捐款多少元?用多元次方程解~ 实验小学六年级的女生占全年级的5分之2,男生人数比女生人数多12人,那么实验小学六年级人数共有多少人? 从学校走到少年宫,聪聪用了10分钟,明明用了8分钟,聪聪和明明的速度比是多少完整一点,急 为了过一个有意义的“六、一”儿童借,实验小学发起了向某希望小学捐赠图书的活动.在活动中,五年级一班捐赠图书100册,五年级二班捐赠图书180册,二班的人数是一班人数的1.2倍,二班平均没 实验小学六年级共有学生180人,其中,女生人数是男生的十一分之九.六年级男生和女生各有多少人? 从学校走到少年宫聪聪用了10分钟明明用了18分钟聪聪和明明的速度比是多少?打错了!明明用了8分钟 实验小学向“希望小学”捐赠一批图书,其中文艺书占40%,连环画占1/4,余下的 840册是科普读物.实验小学共捐图书多少册? 实验小学六年级有学生180人,其中女生是男生的9/11,.六年级男生和女生各有多少人?我看别人的时180/(1+9/11)=99人,为什么用1+9/11? 从学校走到少年宫.聪聪用了10分钟.明明用了8分钟.聪聪和明明的速度比是多少? 新化小学为希望小学捐款,六年级捐2448元,比五年级多20%, 光明小学一年级有学生380人,男生人数的1/5比女生人数的1/6多10人.一年级男女生各多少人? 星期天小红去图书馆借书,原来打算每分钟走50米,但为了提早到10分钟她把速度加快到了每分钟70米,问小红家离图书馆有多远?(要要文字解释 学校组织为希望工程捐款活动,五,六年级捐款数的比是3:5.已知六年级比五年级多捐了400元,两个年级各捐少元? 光明小学男女人数的比是4:5,女生比男生多()%,已知全校学生人数是90人,男生有()人. 图书馆距聪聪家1950米.一天,聪聪从家里出发,步行去图书馆,开始的步行速度为60米|分,走了十五分钟后,步行速度改为|分.聪聪还要都久才能到达?请例方程. 五年级共有72名学生向希望工程捐款零花钱,捐的总数刚好是72的倍数,而记账时有两个数字不清楚:( )52.7( )元 某小学有学生975人,全校男生人数是六年级学生人数的4倍少23人,全校女生人数是六年级学生人数的3倍多11人,问全校有男、女生各多少人?不能用方程. 聪聪骑自行车从家去相距5千米的图书馆借书,从给的统计图中可以看出他去时用的时间是返回所用时间的()%去时骑车的平均速度与返回时骑车的平均速度的最见证书比是(),比值是多少? 某校六年级同学为地震灾区共捐款4000元,占全校捐款总数的七分之四,五年级捐款数占全校的25%,五年级同学共计捐款多少元? 光明小学六年级学生占全校的六分之一,六年级男女比是6:5,男生比女生多23人全校有多少人 聪聪家和明明家合用一个水龙头,聪聪家有4口人,明明家有5口人,上月两家共用10.8吨.按每吨水2.35元计算,两家各应分摊多少元水费? 五、六年级同学共为希望小学捐款4500元, 4、六年级一班有男生23人,女生22人,全班学生占六年级学生总数的5/31. 聪聪家 650米 少年宫 820 明明家 聪聪家和明明家距离多少米? 五、六年级同学共为希望小学捐款4500元,五、六年级同学各捐款多少元 某校五年级共有学生152人,选出男生的1/11和5名女生参加数学竞赛,剩下的男女人数正好相等.这个学校五年级男、女各有多少人?列方程解 明明家离书店有800米,聪聪家离书店比明明家近1/8,求明明家与聪聪家的距离.(通过不同的位置.方向思考) 某校七年级四个班为希望工程捐款7 1班是四个班捐款的总和的六分之一.72班是四个班综合的三分之一.7 3 班是四个班总和的四分之一.7 4 班捐了169元.设四个班总和为x元,方程怎么列? 设计一条捐款捐物捐书的宣传语 聪聪家 书店相距800米,明明家比聪聪家离书店近8分之1,聪聪家和明明两家距离是多少米? 某校七年级(2) 班40 名同学为“希望工程”捐款,共捐款400 元,捐款情况如下表:表格中捐款10元和15 元的人数被墨水污染了.问:捐10元和15元的人数各是多少?{最好是一元一次方程或算术法}( 六年级共捐书540本六年级1班比六年级2班2倍少60本六年级1班和六年级2班各多少本 红红家和聪聪家分别在学校的南\北两个方向上放学后他们同时走出校门各自回家,红红每分钟走80米,聪聪与红红速度比是5:4,10分钟后两个人同时到家.红红家和聪聪家相距多少米? 新城小学六年级同学向希望小学捐款4200元,五年级捐款的4\5和六年级同学捐款的4\7相等, 甲同学捐书的数量是已同学的5/21,丙同学捐书的数量是甲同学的4/5,三名同学捐书总数是310本已同学捐书?求已同学捐多少本?最好有算式! 打同一份稿件,聪聪要用九分之四小时,明明要用35分钟,丽丽要用十五分之七,他们三个人中,谁的打字速度快.(写出算式) 星光小学六年级同学向希望工程捐款,五年级(1)班45人,一共捐款450.7元,五年级(2)班50元,平均每人捐款8.65元,两个班平均每人捐款多少元? 五、六年级共有930人,已知五年级人数的4分之3与六年级人数的5分之4相等,五六各有多少人? 某小学有1000名学生,为了支援南方灾区,纷纷捐书,有一半男生每人捐9本,另一半男生每人捐5本书;一半女生每人捐了8本书,另一半女生每人捐了6本书.全校捐了多少本书? 父亲的年龄是聪聪年龄的9倍,母亲的年龄是聪聪年龄的7.5倍,父亲比母亲大6岁.聪聪今年几岁呢?(列方程解答) 只列算式市实验小学六年级有学生250人,比五年级学生多50人. 正义路小学共有1000名学生,为支援“希望工程”.同学们纷纷捐书,有一半男生每人捐了9本书,另一半男生每人捐了5本书;一半女生每人捐了8本书,另一半女生每人捐了6本书.全校学生共捐了多 父亲的年龄是聪聪年龄的9倍,母亲的年龄是聪聪年龄的7.5倍,父亲比母亲大6岁.聪聪今年几岁? 实验小学六年级的学生参加了三类兴趣活动小组,其中科技组与美术组的人数比是5:4,美术组与数学组的人数比是3:2.已知科技组人数比美数术组和数学组人数的总和少15人.求共多少人? 育才小学六年级为希望工程捐书,男生捐的本书是女生的5分之3,六年级一共捐了640本.男生和女生各捐了多少本 爸爸的年龄是聪聪的3倍,爸爸比聪聪大26岁,爸爸今年几岁?聪聪几岁?急 实验小学五年级女生的人数比全体人数的60%少5人,男学生人数比全体人数的7/20多16人.男女共多少人? 某校六年级三个班为希望工程捐书,一班捐了六年级捐书总数的4/11,二班捐了90册,三班捐的书是一、二班捐书的和的一半,六年级三个班共捐了多少册? 妈妈的年龄是聪聪的5倍.爸爸的年龄比妈妈大三岁.是聪聪的5.5倍、聪聪几岁?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn