您的位置:首页 > 编程语言 > Java开发

论现有JAVA WEB开发模式

2015-10-19 13:46 435 查看
光阴似箭,白驹过隙。 转眼接触JAVA WEB 开发已经 一段时间了。 抛开各种大公司不谈,许多从事WEB开发中小型企业都是没有自己的框架体系。取而代之的是所谓的SHH2 整合 ,spring+Hibernate ,spring + mybatis 整合。不得不承认,这些毫无疑问这些都是国际顶级高手打造的, 针对部分编程问题的优秀解决方案。然后我从 SHH2开始,再到 spring + mybatis ,然后到 spring+Hibernate
,最后 只用了 spring 。因为我发现了一个问题: 中小型企业所面临的处境是 对外项目利润不够大,对内人力成本非常高。虽然这些web的流行框架能够支撑大部分的普通项目和产品,但是太是过于繁琐,过于 “学院化”,过于笨重。

实际上在日常的开发中, 大家基本上就是再做CRUD+界面适配。那么所面临的有如下的几个问题:

1.重复的CRUD过程。

2.类似的数据库操作维护逻辑。 如 保存主子表,级联删除,保存之前先判断等。

3.一些文件操作。读写文件,上传文件。 导出导入Excel等。打印。

4.一些报表查询。

这些基本上是一个业务型程序员的日常。 那么一个普通的SSH 解决方案如下: 整合好框架,配置文件配好,实体写好,然后基于MVC ,采用三层架构,dao,service,controller. 其中dao 和service 层 根据规范可能还需要写两个接口,再写两个实现类。

例如我们对一个做一个简单的用户管理 ,增删改查 。 创建好 user表 ,构建user实体类。然后 写userDao ,写userService ,最后写userController。这样的过程是一个痛苦的过程,当然有经验的开发者 会使用一个泛型Dao替代DAO层,只有service和Controller 。然后通过springMVC 的API或者struts2的API 获取参数完成相应业务。 然而就是完成这样的一个过程,需要好几十MB的JAR包来支撑,配置文件也是比较繁琐。我们完成的日常实际只发挥了这些框架的很小的一部分功能。杀鸡用了牛刀。那么统计下实际上我们完成一个普通的项目只需要
: 一个轻量的ORM框架+一个简单方便的MVC框架。

国内的JFINAL 是个不错的框架,但是我认为还不够简单,还比较拘束。

我设想了一套AIP ,虽然没有实现,但是抛砖引玉一下,希望大家给出宝贵的意见。

1.无需 实体类。使用EntityMap 代替。

什么是 EntityMap? 说白了也就是map ,无法是继承了hasmap 然后自己封装了一些方法。

EntityMap entityMap = EntityMap.create("tableName").set("name","xxx").set("age",123);

这意味着 表名和字段名都需要用字符串来代替了。 看上去好像很可怕,然后实际上: 我们可以通过常量或者配置文件中的KEY来代替表名,这样就可以避免表名发生更改的情况,即:1个入口,N个引用。 另外至于字段就更好处理了,手动设置字段的情况相对较少。然后至于运用实体进行逻辑处理的时候,实际上也只是部分字段,通过 entityMap.getString("name") , entityMap.getInt("age") 等类似的函数替代get方法也未尝不可。

光这样说可能不够形象,直接上代码:

页面

<formaction="提交地址"method="post" enctype="multipart/form-data">
<h1>参数获取测试</h1>
<inputtype="text"name="name"value="测试">-字符串<br>
<inputtype="text"name="age"value="1">-数字<br>
<inputtype="text"
name="date"value="2015-03-10">-时间-(yyyy-MM-dd或者yyyy-MM-dd
HH:ss)<br>
<inputtype="text"
name="num"value="999.99">-小数(Dobule)<br>
<inputtype="file"name="img">-文件<br><br>
<inputtype="submit">
</form>

控制器中的某个方法,其中 MvcParam可以理解为对request的封装

public void test6(MvcParamparam) {
//获取页面参数
System.out.println(param.get("name"));
System.out.println(param.getInt("age"));
System.out.println(param.getDate("date"));
System.out.println(param.getDouble("num"));
System.out.println(param.getFile("img"));

// 文件保存
// param.getFile("img").save(path, fileName);

// param.getRequest();
// param.getSession();
// param.getResponse();

System.out.println("获取参数map====================");
param.getMap().forEach((key,val) -> {
System.out.println(key +":" +
val);
});

//保存 || 修改 (存在主键就是修改,不存在就是保存)
DB.save( param.getEntityMap("tableName"));
//删除
DB.del("tablenName",id);

}
整体规划是一个这样的思路。当然会包括IOC ,ORM,事务控制,拦截器 以及一些常用的函数封装。

至于一些细节问题没有深入研究,只是抛出整体思路希望大家一切探讨一下。

另外我做了一个 测试版尝试一下这种开发模式,下载地址:http://download.csdn.net/detail/a13618662181/9193231

欢迎拍砖。

用JDK8开发的 可能有部分新语法。。。需要大家使用支持JDK8 lambda 的IDE。。。比如: eclipse luna版.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: