Web开发中,存在着各种各样的重复性的工作。为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台。

Web开发基础平台的目标和功能

1.提供一套基础的开发环境,整合了常用的框架配置和库。新项目开发时,不用再重新搭建。

2.提供一些基础的工具类库,比如文件操作、邮件发送、数据库CRUD操作、JSON转换。

3.权限系统设计。

4.异常处理和系统日志。

5.前台界面展示。

特别说明:因本人能力和经验有限,不少东西还未能实现,只能说点思路和看法。

我是用Java来实现我构思的WebCommon开发平台的,不熟悉Java的可以使用相应的语言和库实现。

1.搭建基础环境

  SpringMVC+Spring+Hibernate+Maven+MySQL

 

  a.MVC框架使用SpringMVC,比较简洁,不需要过多的配置。

  b.事务管理回滚、bean注入等使用Spring Ioc。

  c.持久层使用Hibernate,主要是为了写更少的代码。性能问题暂不考虑。

  如果需要较高的性能,建议后期优化Hibernate配置,或者使用Mybatis框架。

  d.使用Maven打包和管理各种库。

  e.主要针对MySQL数据库,其实有了Hibernate不必过分关心数据库的移植问题。

 

  使用Eclipse作为开发工具。

 

2.引入第3方工具类库

  a.Commons-Lang,增强了java.lang包,对String,Date,Integer等基础数据类型增加了很多实用的功能。

  b.文件创建、删除、移动等操作。java.file提供的API不够简洁,使用Commons-IO,Google-Guava,Jodd这3个库中的

  1个或多个来完成。

  c.文件上传。SpringMVC+CommonsIO+Commons-Fileupload可以很简单的实现文件上传功能。

  d.邮件发送。Commons-Mail,Jodd Mail,Spring Mail都可行。

  e.文件压缩。Commons-Compress提供了zip,tar等多种格式的压缩功能。

  f.其它常用库,dom4j处理xml,commons-beanutils处理bean,commons-collection和Google-Guava的集合库。

3.自定义的一些工具类库

a.属性加载器PropertiesLoader,加载属性,获得属性的值。

提供的API如下:

public Properties getProperties();

public String getProperty(String key);

public Integer getInteger(String key);

b.类型转换。

  public static String toString(Object obj);

  借鉴第3方的Commons-Converter,Google-Guava等自带的类型转换工具类,或者完全使用第3方的库进行类型转换。

  public static Double toDouble(Object cell);

  这种形式的API最好了。

 

c.JSON工具类JsonUtils。

  把Java 字符串、数组、集合、Map、POJO类型转换成JSON字符串类型,把JSON字符串转换成Java字符串、数组、集合、Map、POJO等类型。

  提供的API如下形式:

  public static String bean2Json(Object bean);

  public static Object json2Bean(String json, Class<?> beanClazz);

  简而言之,就是希望Json格式的字符串和Java各种对象之间互相转换。

 

d.参数校验。校验参数符合一定的格式,比如是否为空,Email,URL,字符串长度等。

e.自定义数据结构。

比如增强的Map,TypedMap提供以下形式的API:

public Integer getInt(String key);

自带类型转换功能,这样SpringMVC使用TypedMap接收参数后就不必写一大段重复代码进行类型转换了。

f.异常处理和系统日志。

系统内部异常、外部非法访问异常,异常发生后的错误处理和日志记录,

系统监控,404,403,500跳转和处理。

g.加密和安全。

SpringSecuirty中有一些加密工具类,如md5,sha1。

当然,也可以使用其它的或者自己实现。

h.持久层通用API。

i.其它常用功能

报表下载,图表展示,搜索等

4.权限系统设计

使用SpringSecurity设计一套较为通用和常用的权限模型。

user(id,roleId,isSuper) 用户,1个用户只能有1个角色

role(id,name) 角色,1个角色可以有多种用户

authority(id,name)权限

role-authority 角色和权限之间的关系,角色和权限之间是多对多的关系

5.前台界面

a.原型库,各种各样的静态Html界面。每次设计界面,参照已有的原型界面。

b.表单验证。jquery-validate等验证框架。

c.表格、对话框、分页、日历等各种常见UI组件。

总结:Web开发中,有很多重复的功能和设计。增强复用,构建一套Web开发基础平台-WebCommon是非常有意义的事情。

本文只是抛砖引玉,介绍了我对该“美好”系统的一种设计和实现思路。

欢迎给予反馈,给出一些富有建设性的意见和建议。

还有很多内容本文没有谈到,如有必要,将在后续文章中描述。

好友反馈

1.怎么用jquery validate?


好友认为该框架不太好。

我确实没有详细调研每个框架,自己使用的经验也不够。

2.异常和日志处理 感觉没说好。

我打算专门写篇文章来总结 异常和日志处理这部分。

Web开发的那点事–异常和日志处理.txt

3.我说的 很多都是 比较常见的情况,不是一直建议使用的。

比如Hibernate 很多时候就不常用了,

我主要面向初期考虑,等有经验了才能改良,现在好多都不懂啊,想自己创造机会实践下。

“你既然想贵广,就应该是改良后的“,目前没有想推广,仅仅是分享,寻求建议和反馈的。

相关阅读

1.提高生产力:发送邮件API和Web服务(包含源码)

http://fansunion.cn/articles/2337

2.提高生产力:Web前端验证的标准化

http://fansunion.cn/articles/2277

3.提高生产力:数据持久层(DAO)常用功能–通用API的实现

http://fansunion.cn/articles/2264

4.提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)

http://fansunion.cn/articles/2246

5.提高生产力:2个方法,软件复用和知识库

http://fansunion.cn/articles/2038

6.提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数

http://fansunion.cn/articles/2289

7.提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

http://fansunion.cn/articles/2094

更多文章请参考我的 CSDN博客 http://blog.csdn.net/FansUnion

或我的博客网站-小雷网(http://FansUnion.cn)

原文链接:http://FansUnion.cn/articles/2362

提高生产力:Web开发基础平台WebCommon的设计和实现的更多相关文章

  1. [置顶] 提高生产力:Web开发基础平台WebCommon的设计和实现

    Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...

  2. 第五模块:WEB开发基础 第1章·HTML&CSS基础

    01-前端介绍 02-HTML介绍 03-HTML文档结构 04-head标签相关内容 05-常用标签一之h1~h6,p,a 06-常用标签一之ul.ol.div.img.span 07-常用标签二- ...

  3. PHP 系列:PHP Web 开发基础

    PHP是动态类型的Web开发的脚本语言,PHP以页面文件作为加载和运行的单元,PHP现在有了Composer作为开发包管理. 1.使用Composer管理依赖 自从.NET开发用了Nuget管理程序集 ...

  4. 移动WEB开发基础入门

    什么是移动WEB开发,我个人理解就是,将网页更好的显示在移动端的一些设置,简单来说就两点如下: 1.流式布局,即百分比自适应布局 将body下的div容器的样式设置如下: div{ width:100 ...

  5. web开发基础--字节序

    字节是网络传输上的最小单位,是web开发中需要了解的一个知识点. 1.有效位 在谈字节序前需要先了解有效位,有效位分为两种:最低有效位(LSB: Least Significant Bit) 和最高有 ...

  6. Java Web开发基础(3)-JSTL

    在DRP项目中接触到了JSTL标签库,对我这样的比較懒的人来说,第一感觉就是"惊艳". JSTL标签库的使用.能够消除大量复杂.繁复的工作.工作量降低的不是一点半点.是降低了一大半 ...

  7. 第五模块:WEB开发基础 第3章·BootStrap&JQuery开发

    01-JQuery介绍 02-jQuery文件引入和加载的区别 03-jQuery的基础选择器 04-jQuery的层级选择器 05-jQuery的基本过滤选择器 06-jQuery的属性选择器 07 ...

  8. Web开发基础知识

    综述 最近开始Java Web方面的工作,千里之行始于足下,我们在开发过程中要善于总结自己遇到的问题.善于管理一些优秀的代码片段.本文的主要内容是Web开发的基础知识,对于大牛来说可以忽略,对于初入W ...

  9. 移动端web开发基础概念

    最近在了解移动端web开发的相关知识,有些概念总是模糊不清,这次花费了一些时间整体的梳理了一遍. 分辨率 分辨率可以从显示分辨率与图像分辨率两个方向来分类.显示分辨率(屏幕分辨率)是屏幕图像的精密度, ...

随机推荐

  1. Google Style Guides-Shell Style Guide

    作者声明 这篇翻译文章对我来说是有点小挑战的.由于我英语实在非常烂,勉强能够看懂一些技术文档,能够猜出大概的含义.可是翻译对我来说算是一个挑战,看英文文档已经不是一天两天的事了,可是这个篇文章却是我的 ...

  2. python清除数据库错误日志

    # coding=gbk from encodings import gbk  import re   import sys import  os import  pyodbc import trac ...

  3. 用BFS解决迷宫问题

    在一个n*n的矩阵里走,从原点(0,0)開始走到终点(n-1,n-1),仅仅能上下左右4个方向走.仅仅能在给定的矩阵里走,求最短步数. n*n是01矩阵,0代表该格子没有障碍.为1表示有障碍物. in ...

  4. Local Response Normalization作用——对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力

    AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中.AlexNet主要使用到的新技术点如下. (1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过 ...

  5. 确定比赛名次--hdoj

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  6. 【Codeforces 258E】 Devu and Flowers

    [题目链接] http://codeforces.com/contest/451/problem/E [算法] 容斥原理 [代码] #include<bits/stdc++.h> usin ...

  7. day63-webservice 05.发布接口实现类的webservice

    package com.rl.cxf.client; import com.rl.inter.HI; import com.rl.inter.HIService; public class HiInt ...

  8. [ASP.Net] MVC2,3,4,5的不同

    现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...

  9. golang互斥锁和读写锁

    一.互斥锁 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段.它由标准库代码包sync中的Mutex结构体类型代表.sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开 ...

  10. 爬虫之 Requests库的基本使用

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...