- 浏览: 443283 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (108)
- Ibatis (0)
- ZK (13)
- 设计模式 (3)
- Java编程 (21)
- 正则表达式 (2)
- 开发小续 (2)
- 杂谈 (1)
- 数据库 (6)
- Hibernate (6)
- Struts 2 (2)
- Spring (2)
- 版本控制 (4)
- Subversion (1)
- Myeclipse (1)
- EL (1)
- jsp (1)
- CAS (1)
- SSO (1)
- Restful Web Service (3)
- jersey (2)
- jersey与spring (1)
- web service框架 (1)
- 系统分析 (1)
- Subversion windows service (1)
- tomcat (1)
- PermGen Space (1)
- 编程心得 (1)
- google map api (1)
- springmvc (1)
- ajax (1)
- Hibernate QBC (1)
- oracle oracle10g (1)
- RBAC 权限设计 (1)
- springsecurity 3 (1)
- JPA (1)
- JPA j2ee (1)
- maven java (1)
- Jquery框架 UI框架 (1)
- printcss (1)
- java reflect 反射 (1)
- Jquery框架 UI框架 3scschool (1)
- collabnet Subversion (1)
- linux redhat (1)
- mysql (3)
- spring spring-data-jpa (1)
- Jquery AjaxForm (1)
- Jquery Map (1)
- linux (3)
- linux nginx openssl zlib pcre (1)
- linux jdk (1)
- 物联网技术 嵌入式 C# (1)
- oracle 数据库 (1)
- oracle (5)
- maven (1)
- java 定时器 (1)
- swing (1)
- java (2)
- 短信接口 (1)
- DBUtils (1)
- JDBC (1)
- javascript json (1)
- shiro (1)
- 权限系统 (1)
- 嵌入式 (1)
- 树莓派 (1)
- python (1)
- Github (1)
- 代码托管 (1)
- 产品设计 (2)
- 产品需求 (2)
- BRD (1)
- MRD (1)
- PRD (1)
- DRD (1)
- FRD (1)
- GIS (1)
- SOA (1)
- 网站资源 (1)
- 骆驼 (1)
- 黑客技术资源 (1)
- 网络安全资源 (1)
- 个人修炼 (1)
- Angular2 (1)
- Nodejs Krakenjs (1)
最新评论
-
GeorgeFeng:
学习啦,感谢
RBAC用户权限管理数据库设计 -
徜徉の小溪:
yuanliangding 写道请求进来时,创建的对象都不是由 ...
基于RESTful Web Service 的Jersey框架与Spring完美整合 -
yuanliangding:
请求进来时,创建的对象都不是由Spring弄出来的。。
基于RESTful Web Service 的Jersey框架与Spring完美整合 -
Ripin_Yan:
我已经按照你的xml这个顺序配置了,结果还是中文乱码。是还有什 ...
SpringMVC使用注解@ResponseBody返回json中文乱码 -
王静娜:
作者的实体图画的很好很有条理,但是个人觉得用户组对应的是资源, ...
RBAC用户权限管理数据库设计
有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。
一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。
二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案,比如说,在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架(framework),之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。
三、始终牢记——“少即是好(Less is more)并不总是对的”。代码效率虽然很重要,但在许多解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子:
- if(newStatusCode.equals("SD") && (sellOffDate == null ||
- todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
- todayDate.compareTo(lastUsedDate)>0)) ||
- (newStatusCode.equals("OBS") && (OBSDate == null ||
- todayDate.compareTo(OBSDate)<0))){
- newStatusCode = "NYP";
- }
能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:
- if(newStatusCode.equals("SD") && (sellOffDate == null ||
- todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
- todayDate.compareTo(lastUsedDate)>0))){
- newStatusCode = "NYP";
- }
- else if(newStatusCode.equals("OBS") && (OBSDate == null ||
- todayDate.compareTo(OBSDate)<0)) {
- newStatusCode = "NYP";
- }
是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。
四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?
- public class A {
- public static final String S_CONSTANT_ABC = "ABC";
- public boolean methodA(String sParam1){
- if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
- return true;
- }
- return false;
- }
- }
现在,每次需要将“ABC”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。
五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。
六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上 System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用 System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估 System.out.println危害啊,请看下面的代码:
- public class BadCode {
- public static void calculationWithPrint(){
- double someValue = 0D;
- for (int i = 0; i < 10000; i++) {
- System.out.println(someValue = someValue + i);
- }
- }
- public static void calculationWithOutPrint(){
- double someValue = 0D;
- for (int i = 0; i < 10000; i++) {
- someValue = someValue + i;
- }
- }
- public static void main(String [] n) {
- BadCode.calculationWithPrint();
- BadCode.calculationWithOutPrint();
- }
- }
从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。
要避免浪费CPU时间,最好的方法是引入像如下的包装方法:
- public class BadCode {
- public static final int DEBUG_MODE = 1;
- public static final int PRODUCTION_MODE = 2;
- public static void calculationWithPrint(int logMode){
- double someValue = 0D;
- for (int i = 0; i < 10000; i++) {
- someValue = someValue + i;
- myPrintMethod(logMode, someValue);
- }
- } public static void myPrintMethod(int logMode, double value) {
- if (logMode > BadCode.DEBUG_MODE) { return; }
- System.out.println(value);
- } public static void main(String [] n) {
- BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
- }
- }
另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码:
- public static void concatenateStrings(String startingString) {
- for (int i = 0; i < 20; i++) {
- startingString = startingString + startingString;
- }
- }
- public static void concatenateStringsUsingStringBuffer(String startingString) {
- StringBuffer sb = new StringBuffer();
- sb.append(startingString);
- for (int i = 0; i < 20; i++) {
- sb.append(sb.toString());
- }
- }
在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。
七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:
1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。
2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。
3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。
八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。
九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:
1、 先于编写类代码之前编写单元测试。
2、 记录单元测试中的代码注释。
3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。
十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。
发表评论
-
开源项目 企业框架,学习资料
2013-05-13 16:10 1541Spring mvc+hibernate+freemar ... -
maven 通用配置
2013-04-27 10:02 2985在搭建maven 项目的时候,我们很 ... -
SpringMVC使用注解@ResponseBody返回json中文乱码
2012-11-27 14:42 12447----------------------------- ... -
CAS 单点登录client,server端分析
2012-04-09 13:14 12691本篇文章是对JA-SIG CAS(v3.3)的初步调研总 ... -
EL表达式 functions String处理函数
2012-03-27 14:56 421401.uri="http://java.sun.co ... -
Hibernate hbm.xml中查询数据作为虚拟列Formula使用
2011-12-26 17:09 6208Hibernate 中的Formula 攻 ... -
Dom4jUtils 工具类让你更加方便操作XML的MarkerIce.Jar
2011-09-29 11:24 1612最近我闲着无聊,看到一篇文章关于XMl的操作.对于XMl操作相 ... -
getHibernateTemplate.load() 和get()之间的区别
2011-09-08 15:19 8706今天我在hibernate 进行 getHibernateTe ... -
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
2011-05-24 09:16 1585先推荐一篇关于排序算法的文章:http://www.cpp ... -
struts2整合JSON,JQuery 实现ajax功能
2011-05-17 10:23 24114月 我使用到了 struts2 整合JQuer ... -
在spring来管理实例对象prototype和singleton的选择.针对action如何使用
2011-04-22 15:54 1339默认情况下,从bean工厂所取得的实例为Singleton(b ... -
Apache Commons工具集简介
2011-03-22 14:33 1246Apache Commons包含了很多开源的工具,用于解 ... -
java使用定时器,定时发送邮件
2011-02-22 16:01 1663java使用定时器,定时发送邮件 ... -
JSP 分页标签库
2010-12-31 16:11 3003好了,该说一下怎么用 ... -
struts2类型转换机制
2010-12-31 14:17 1620struts2类型转换机制 package com. ... -
java中web.xml的配置信息
2010-11-18 09:49 3723<?xml version="1.0&q ... -
forward,include,redirect的区别(转)
2010-08-27 13:54 1317forward,include,redirect是 ... -
一个Java程序员应该掌握的10项技能[转]
2010-06-12 10:53 12601、语法:必须比较 ... -
Java 线程同步示例
2010-06-08 23:22 1368文章用实例代码展示了Java中多线程访问共享资源 时线程同 ... -
synchronized 关键字
2010-05-28 10:28 1171synchronized 关键 ...
相关推荐
Java开发者十大戒律 Java开发者注意事项
Java开发者的十大戒律 Java开发者的十大戒律 Java开发者的十大戒律
Java开发者的十大戒律
java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java...
阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。 阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。 阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。阿里巴巴JAVA开发者手册,让你从小白变成...
Java开发者需坚守的十大基本准则(java开发者必看!!)
java开发者必备的各种文档.包括java j2ee spring struts hibernate
开发学习过程中的问题总结 超经典 仅用于学习交流
think in java,jdk1.6中文帮助文档chm,sql server精华,xml指南,
本文中列举了10个在Java编程中的重要规则。知道这些规则不重要,遵循这些规则才是最重要的。希望这些规则可以帮助大家成为更好更专业的编程人员。
JAVA开发者最常去的20个英文网站.JAVA开发者最常去的20个英文网站.JAVA开发者最常去的20个英文网站.JAVA开发者最常去的20个英文网站.JAVA开发者最常去的20个英文网站.
请随时记住。 有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。