[置顶] 提高生产力:Web开发基础平台WebCommon的设计和实现
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的设计和实现的更多相关文章
- 提高生产力:Web开发基础平台WebCommon的设计和实现
Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...
- [置顶] 提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)
官方网站:http://jodd.org/ 下载地址:http://jodd.org/download/index.html Jodd=tools + ioc + mvc + db + aop + t ...
- [置顶] Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
协议是为了弥补Objective-c中类只能单继承的缺陷,在Objective-c2.0之前当一个类遵循一个协议的时候,必须在类中实现协议的所有方法,在Objective-c2.0之后协议中的方法就有 ...
- [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)
在c++中我们可以多继承来实现代码复用和封装使程序更加简练.在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(catego ...
- [置顶] Objective-C ,ios,iphone开发基础:在UITextField输入完以后,隐藏键盘,
在x-code Version 4.3.2 (4E2002)下编译: 在 Controller. m 文件下添加如下实例方法即可: - (void)viewDidUnload { [super vie ...
- [置顶] Objective-C ,ios,iphone开发基础:自定义控件:Eg: UIButton
第一步:新建一个工程,在 .h文件中坐如下声明: #import <UIKit/UIKit.h> @interface MyButtonViewController : UIViewCon ...
- [置顶] Objective-C ,ios,iphone开发基础:UIAlertView使用详解
UIAlertView使用详解 Ios中为我们提供了一个用来弹出提示框的类 UIAlertView,他类似于javascript中的alert 和c#中的MessageBox(); UIAlertVi ...
- [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)
protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...
- [置顶] Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
SQLite 是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...
随机推荐
- Java线程(十):CAS
前言 在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全.以 ...
- js面向对象继承
前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...
- 如何设置gen_server在退出时执行相关操作
如果gen_server在监控树中不需要stop函数,gen_server会由其supervisor根据shutdown策略自动终止掉.如果要在进程终止之前执行清理,shutdown策略必须设定一个t ...
- C# 网络编程 Part.1
本人也是新手,对网络编程一窍不通,所以从今天开始我将学习网络编程的基础知识,在此一一贴出来,编辑成一个系列! 1.为自己复习巩固用 2.可以找到同时在学习网络编程的同学,一起讨论交流,促进学习效率及其 ...
- USACO Wormholes 【DFS】
描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12,n是偶数),每个在农场二维地图的一个不同点. 根据他的计算,约翰知道他的虫洞将形成 N/2 ...
- net core开发环境准备
net core开发环境准备 1.1 安装sdk和运行时 浏览器打开网址https://www.microsoft.com/net/download, 到.Net Core下载页面. 根据操作系统, ...
- BAAS
http://blogs.embarcadero.com/sarinadupont/category/baas-tutorials/?cid=701G0000000vH0A&elq=51f98 ...
- methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。
methanol模块化的可定制的网页爬虫软件,主要的优点是速度快. 下载:http://sourceforge.net/projects/methabot/?source=typ_redirect R ...
- poj3308 Paratroopers --- 最小点权覆盖->最小割
题目是一个非常明显的二分图带权匹配模型, 加入源点到nx建边,ny到汇点建边,(nx.ny)=inf建边.求最小割既得最小点权覆盖. 在本题中因为求的是乘积,所以先所有取log转换为加法,最后再乘方回 ...
- 数论F - Strange Way to Express Integers(不互素的的中国剩余定理)
F - Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format: ...