Java,Jsp,模式及框架
Web技术
Web服务器
浏览器相关
SQL语言
数据库
开发环境
软件开发及管理
网站SEO
短信及邮件服务
网页设计
电脑、硬件及网络
协同管理平台问题
电子商务
前沿技术及趋势
  当前位置:首页 - 知识积累 - 软件开发及管理
银杏界平台开发注意事项
时间:2010年08月19日 

代码逻辑规范

1. 尽量避免循环逻辑中出现查询数据库的代码。杜绝两层循环中出现数据库查询的代码。2. 应该尽量重复使用ListMap等集合对象。3. 对于ListMap等集合对象应尽量使用泛型形式。4. Map的循环可以改成第二种方式,提高效率例如:第一种方式:  
  Set appFieldDefIds = paraMap.keySet();
  
  for (String appFieldDefId : appFieldDefIds) {
  
       String values = paraMap.get(appFieldDefId);  
       ......
 }  
  第二种方式  
  for(Entry entry : paraMap.entrySet()){  
       String appFieldDefId = entry.getKey();
     String values = entry.getValue();
     .......
 }
5. 尽量对于包含大量数据的集合对象,在使用结束后,尽量将其设为null
6. 避免在循环中出现捕获异常的代码。
7. 在代码的设计中,要尽量遵循低耦合高内聚的原则。
   例如以下代码:
    Page page = null;
    if ("WebPriv".equals(entity)) {
        //A情况
        List c = NS.findEntsByReq(entity, order, request);
        page = new Page(c, pageNo, size);
    }else if("EmailOption".equals(entity)){
       //B情况
       List c=(List)request.getAttribute("ents");
       page=new Page(c,pageNo,size);
   }else {
      //C情况
      page = new Page(entity, UtilMisc.toList(order), pageNo, size, request);
  } 
   在A的实现中,c是通过数据库查询产生的,而在B的实现中,c却是从request中获取的。这样此段代码就会很大程度上和存放request参数的页面或类存在耦合关系。不利于日后代码的维护。
8. 尽量采用lazy loading 的策略,即在需要的时候才开始创建。
    例如:
    String str="abc";
    If(bool==true){
        doSomethings(str);
    }
    应替换为
    If(bool==true){
       String str="abc";doSomethings(str);
    }
9. 使用I/O流操作结束后务必将其关闭。
10. 尽量减少对变量的重复计算 
    例如:for(int i = 0;i < list.size(); i ++) {
            …
   }
应替换为:

    for(int i = 0,int len = list.size();i < len; i ++) {
            …
}
12. 尽量不要在session中存放大量数据。
13. 复杂的字符串连接,插入,删除等操作尽量使用stringbuffer对象来处理。
14. 需要按照插入顺序读取每个键值对时,使用Map map=LinkedHashMap();
15. 一般情况下对List使用ArrayList类进行实现。当对Listsort需求时,则使用LinkedList进行实例化。
16. 解析字符串时应尽量使用正则表达式完成。
17. if判断中一定要注意“!”符号的使用,不要遗漏或误添。如果没有好习惯就使用“==true”或“==false;
18. 在统一代码审查之前慎用代码格式化。代码审查之后要统一模板再进行代码格式化。
19. 要尽量保证后台代码注释的正确性,修改相关代码后,一定要将关联的注释也修改。
20. 后台代码定义变量时,应该尽量使用有明显含义的英文或中文拼音做为变量名。前台的DHtml对象或javascript变量名定义要尽量避免过于通用的名称,要符合一定的命名规范如:05info_comment05info_username

系统部分

1. 系统中查询的数据如:人员,机构,角色等不是变动频繁的实体时,应尽量使用findEntCache方法。
2. 判断文件类型,手机或电子邮件等方法要尽量使用Global中的方法(Global中以“is”开头的方法)。
3. 系统的各个jsp页面链接,尽量使用根目录地址如“/generalValue/system/space/editContent.jsp
4. 如果要记录操作日志,必须使用含有request作为参数的entityStone方法。
5. entitymodel.xml中添加一个实体定义要在entitygroup.xml中添加对应的信息。
6. 数据库中存在但是entitymodel.xml中不存在的实体,可以到当前项目上一文件夹components\entity\entitydef中查找。
7. 各种权限控制的功能尽量通过Priv类中现有的方法实现。
8. 在登录的前提下,操作数据库时,应尽量使用含有request方法,以保证系统对操作者权限的控制和所属空间的设置。如果为了跳过系统的权限控制,可以不使用含有request的方法,但是显示地对namespace进行设置和处理。
9. 如果对操作数据库之前或之后做统一的处理,在Mydelegator.java中操作。
10. 系统周期性的处理,应该继承RecurrentJob类,实现getTimes()(周期时间)和execute()(事务处理)即可。
11. 对人员和空间的信息查询工作,应该尽量使用UserInfoSpace类。
12. 页面上需要显示某个实体的某个字段信息,应尽量使用Global.getFieldLabel()方法,如果显示为输入框时,应尽量使用Input(GenericValue ent,String fieldName,HttpServletRequest request)方法。
13. Kefuwebsites文件夹的访问在系统中不受是否登录判断的限制。
14. Webroot/upload/_05oa文件夹是存放只属于个人的信息,不属于任何空间。同级其他的每个文件夹都专门存放某个空间中的信息,文件夹名和所属空间的id相同。
15. 附件上传时保存原文件名,超文本编辑器中上传的图片或视频使用UUID作为文件名。

关联部分

1.User实体。与User表有直接关系的实体有:UserUserDeptRolePartyDepartment。当删除一个空间的某个人员,应该将此人员对应的UserDept删掉。当一个人员没有和任何一个UserDept记录对应时,此人员为垃圾人员。RoleParty是人员角色实体。
2.网站类实体。网站类的实体定义主要有:WebSite,WebColumn,WebTemplate,WebContent,等以Web开头的实体。其中每个实体都和WebSite以多对一的关系关联。当删除站点时,对应的其他实体的相关记录都应该删除。
3.当发布某篇内容页面A时,系统会判断并自动生成A所属的栏目树中的所有栏目首页。