阅读更多

11顶
1踩

编程语言

翻译新闻 编程语言之间的界限

2013-10-10 16:04 by 资深记者 学良3 评论(2) 有9832人浏览

本文作者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和服务器端语言之间的界限


 

利用一个服务器端语言来创建高层次的动态SQL是很容易的,就像使用C#字符串生成SQL语句一样简单,但是存储的程序和ORM通常会提供一个更安全、更优雅的方法来生成动态的SQL。

 

编写动态SQL字符串的同时也打开了通往“SQL资料隐码攻击漏洞”的大门,并且取消了DBA管理和提高查询性能的机会。含有SQL字符串的App在运行时也存在很高的风险,尤其是当模式发生变化的时候。ORM向数据库提供增强型的类型接口,可是当模式不能够和现有的数据库查询同步的时候,这些数据库就无法编译了。

 

JavaScript和服务器端语言之间的界限

 

 

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



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

 

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

 

保持本地化

 

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

 

Via BitNative

  • 大小: 4.2 KB
  • 大小: 16.3 KB
  • 大小: 4.9 KB
  • 大小: 9.6 KB
  • 大小: 13.3 KB
  • 大小: 4.9 KB
  • 大小: 6.4 KB
  • 大小: 4.1 KB
  • 大小: 4.4 KB
  • 大小: 21.9 KB
  • 大小: 6.3 KB
11
1
评论 共 2 条 请登录后发表评论
2 楼 shuhen2011 2013-11-11 15:03
我很喜欢用js拼HTML,对于不那么复杂的显示,只要缩进得当,看来其也是很清晰的,主要是简单直观
1 楼 骨之灵魂 2013-10-14 21:37
不明觉厉 

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • JSP自定义标签rtexprvalue属性用法实例分析

    本文实例讲述了JSP自定义标签rtexprvalue属性。分享给大家供大家参考。具体如下: 其实以前也有写过自定义标签, 但是没有注意到过的用法, 最近这几天又用上自定义标签了, 突然发现的用法是有讲究的. rtexprvalue...

  • (二)SpringDate jpa的使用和自定义sql语句

    1.基础调用 2.自定义sql

  • 如何实现jsp数据插入sql数据库

    //连接数据库 Connection ct = null; PreparedStatement ps=null; int rs=-1; //插入成功标志位 ,如果插入...String url="jdbc:sqlserver://localhost:3247;DatabaseName=Manger"; String user2="sa"; String pa

  • jsp如何导入自定义java_学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

    jsp标签的分类:1)内置标签(动作标签): 不需要在jsp页面导入标签2)jstl标签: 需要在jsp页面中导入标签3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签1、内置标签(动作标签):转发标签:语法:相当于java...

  • java/jsp执行sql语句的方式

    首先给出sql驱动包(CSDN无法设置免CB下载,介意的请大家另辟途径获取) 引入sql包 import java.sql.*;//java <%@ page import="java.sql.*"%>//jsp 连接mysql数据库 String DBDRIVER= ...

  • 泛微OA 自定义删除sql缓存

    大家都知道泛微OA E8/E9 封装的 RecordSet 是有缓存的,如果直接操作数据库 会出现数据库值跟页面实际显示值不一样,这样的话 我们需要手动去更新下缓存,系统管理员访问/commcache/cacheMonitor.jsp 如果大家自己...

  • java中jsp table标签属性_JSP自定义标签-属性

    JSP自定义标签-属性1 带属性的JSP自定义标签对于任何JSP自定义标签,可能都需要定义属性。要定义属性,您需要执行两个任务:使用属性名称在TagHandler类中定义属性并定义setter方法在TLD文件中的tag元素内定义...

  • jsp自定义标签下拉框

    import java.sql.*; import sun.jdbc.odbc.ee.ConnectionPool; public class BaseDao { //定义数据源驱动 private static final String drive="oracle.jdbc.driver.OracleDriver"; /

  • JSP自定义标签-Select标签

    自定义select标签,未完善package com.sdTag;import java.io.IOException; import java.util.ArrayList; import java.util.List;import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; ...

  • Nutz --自定义SQL多表查询(含分页)-- 不映射实体类

    用Nutz的自定义Sql进行分页查询,一种方法是可以建立返回数据(即jsp页面要查询的相对应字段)的实体类,还有一种不需要映射实体类,今天就来介绍一下不需要映射实体类的方法: 示例是一个有查询条件以及分页功能的...

  • 如何通过JSP实现头像自定义上传

    文章目录开发概述开发环境开发过程1、JSP前台页面样式图:JS操作2、数据库的设计数据库表:实体类:UsersInfo.java3、数据库操作UsersMapperUsersMapper.xml4、Servlet5、工具类DownloadImage:下载指定路径下的文件...

  • JSP自定义标签

    在JSP规范的1.1版中增加了自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术,通过使用自定义标签,可以在简单的标签中封装复杂的功能。 为什么要使用自定义标签库?做开发的我们都知道,在HTML页面中...

  • 开发一个用来执行sql的jsp页面

    接到需求让做一个用来执行sql语句的隐藏页面(至于为啥做这个...内部系统,可以理解) 其实就是后台接收到前台传递的sql并执行 用jdbc来实现,主要就是区分是select语句还是其他DML语句;因为jdbc的...

  • jsp下拉列表—自定义标签

    有时一个网页中下拉列表很多,而且是动态变化的时候,这时有自定义标签就会很方便 首先是jdbc数据连接 [c-sharp] view plain copy ackage pro.shopping.util;    import ...

  • 【JavaWeb探究】自定义JSP标签(三)

    上篇博客我们简单的创建了一个自定义标签,这篇博客我们将继续介绍自定义JSP标签,不过难度升级,我们来定义一个稍难一点的自定义JSP标签,来做一个下拉框,查询父节点对应下面的子节点,我们以查询一个省份下对应的...

  • JSP2自定义标签(二)——带属性的标签

    本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+...续JSP2自定义标签(一)      前面的简单标签既没有属性也没有标签体,用法功能都比较简单。实际上还有如下两种标签:带属性的标签和带标

  • JSP 代码生成工具 JSP Maker 1.1 英文免费版.zip

    JSP Maker 是一款强大易用的代码生成器,可从MySQL和Oracle中快速生成一套完整JSP(JAVA服务器页)代码.使用生成的JSP,用户可以轻松查看,编辑,搜索以及添加删除网页上的数据库记录。生成的代码清洁并易于用户定制.JSP...

  • jsp 标准标签库简析

    进一步将应用程序的显示层和业务层完全分离,更加有利于应用程序的分工协作,jsp开发者指定了 JSTL ,提供了一组统一的通用的自定义标签文件,并将这些文件组合在一起,形成了jsp标准标签库,即JSTL。 1) 定义:包含...

  • jsp自定义标签封装jqGrid

    jsp标签技术非常实用,这不,才到公司实习就用到了。我是用一个jsp标签封装了jqGrid(jQuery的一个表格插件)通过...下面主要讲的是jsp自定义标签的用法。 一、写一个tag的解析类 要继承TagSupport类,复写 doStartTag

  • 小米15工程固件 可以用于修改参数 修复tee损坏 修复底层分区 会用的下载

    资源描述: 机型代码:dada 1-----工程固件可以用于修改参数 开启diag端口。可以用于修复tee损坏以及修复底层分区。 2-----此固件是完整官方。不是第三方打包。请知悉 3-----此固件可以解锁bl后fast模式刷写。也可以底层深刷。也可以编程器写入 4-----请会用此固件 了解工程固件常识以及会用的朋友下载。 5-----个别高版本深刷需要授权才可以刷入。需要自己会刷写。 6------资源有可复制性。下载后不支持退。请考虑清楚在下载哦 工程资源常识可以参考博文:https://blog.csdn.net/u011283906/article/details/141815378 了解基本

Global site tag (gtag.js) - Google Analytics