我只想跟这个残酷的编程世界说几句话

我选择死亡 2015-10-19 02:11:18
加精
光阴似箭,白驹过隙。 转眼接触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版.
...全文
29034 119 打赏 收藏 转发到动态 举报
写回复
用AI写文章
119 条回复
切换为时间正序
请发表友善的回复…
发表回复
insist_on_doing_y 2017-07-08
  • 打赏
  • 举报
回复
引用 3 楼 xiesq5112 的回复:
敢问楼主 设想了一套AIP ,这套AIP 是什么东东? 恕在下愚昧,只听过API ,却不知AIP 是何物
楼主帮你按住了,快过来打他!
qq_15791115 2017-04-28
  • 打赏
  • 举报
回复
虽然我是初学者 也觉得 很多jar包都是好多好多M 其实自己的代码也没多少 细细一想,是,好像很浪费 但是看了楼上的回答,主流框架在安全性这些是有付出的。 算了 我说不下去了。。
沪上楚枫 2017-04-19
  • 打赏
  • 举报
回复
搭一时环境,写一生代码
Harmansolar 2017-03-11
  • 打赏
  • 举报
回复
进来学习,定个位
  • 打赏
  • 举报
回复
小菜鸟表示看不懂
xb12369 2015-11-20
  • 打赏
  • 举报
回复
总觉得在那里见过的
I_am_a_Beginner 2015-11-18
  • 打赏
  • 举报
回复
进来学习学习!
xie5869245 2015-11-18
  • 打赏
  • 举报
回复
感觉楼主还是有思想的在写程序,尽管我是初程的水平,但是喜欢楼主对这些主流东西质疑,向你学习
qq_30975311 2015-11-18
  • 打赏
  • 举报
回复
引用 58 楼 a13618662181 的回复:
嗯 马上关!!!
[s:]楼上的说啥[/s]
qq_30975311 2015-11-18
  • 打赏
  • 举报
回复
引用 12 楼 baidu_32139895 的回复:
还是这里高手多,以后经常来逛
引用 12 楼 baidu_32139895 的回复:
还是这里高手多,以后经常来逛
高手如云
java_liyi 2015-11-17
  • 打赏
  • 举报
回复
程序不但是给自己看的,也是给别人看的 一个Map虽然看上去简化了编程,但若干时间后,你要如何看待自己的代码,别人又如何理解你的代码,如果前后台分离,请问下你怎么知道前台传过来的param到底是int还是double呢 你这个思路其实还是局限于那种单打独斗的项目中,只要自己能看懂,能维护就行,但是对于稍微有点规模,3个人以上的项目就会很困难,不信你可以去试试看到底是前期好好的定义entity花的时间多,还是后期维护时看代码修改花的时间多
qq_30975311 2015-11-17
  • 打赏
  • 举报
回复
引用 42 楼 a13618662181 的回复:
[quote=引用 41 楼 jaylongli 的回复:] 我觉得大部分人都是类似的工作,并且大部分人都有这个想法,为什么最终没变,你自己想想,我不信这些人都没有你聪明,没有你经验丰富。 另外楼主最后说的方法,用 mybatis也能实现的,配置数据库表跟字段在xml中,直接操作数据库。 楼主后来的推崇的方法只适合小项目可以省事,但是层次不清晰,全部在一起。
看来我必须拿出实际的东西来。[/quote] 期待你的成果
qq_30975311 2015-11-16
  • 打赏
  • 举报
回复
引用 102 楼 MAKTY 的回复:
[quote=引用 6 楼 xiesq5112 的回复:] [quote=引用 4 楼 h786556226 的回复:] [quote=引用 3 楼 xiesq5112 的回复:] 敢问楼主 设想了一套AIP ,这套AIP 是什么东东? 恕在下愚昧,只听过API ,却不知AIP 是何物
楼主,这笔是找茬的,我代表你消灭它[/quote] 对不起,您权限不够,请联系CSDN 管理员,谢谢![/quote] 坐标已经定位,等待导弹发射[/quote]
引用 105 楼 qq_30975311 的回复:
[quote=引用 48 楼 dxqrr 的回复:] 那是因为你没有见到复杂的情况
BBQ[/quote] 楼上的说啥了
qq_30975311 2015-11-16
  • 打赏
  • 举报
回复
Spring Data JPA
qq_30975311 2015-11-16
  • 打赏
  • 举报
回复
引用 48 楼 dxqrr 的回复:
那是因为你没有见到复杂的情况
BBQ
codeworkscn 2015-11-16
  • 打赏
  • 举报
回复
Spring Data JPA , 十几行代码定义一个 interface 继承PagingAndSortingRepository, 增删改查(各种条件查询、分页查询)全部都有了,很方便。 ref: http://spring.io/guides/gs/accessing-data-rest/
zapdos 2015-11-16
  • 打赏
  • 举报
回复
我跟你也有类似的想法 我在以前一个公司里面做了一个类似的框架,按照自己的开发习惯觉得怎么用顺手的,全部由框架管理,无配置文件这样,用几个注解来代替,这样一个hello world或者操作数据库的只要写几行代码就行,不需要配置,需要配置的那是对功能进行定制了 大家用起来普遍反映还可以,就是前端做的太复杂,80%的时间都耗在前端上了,所以说前端还是有点失败的,现在已经成为公司的拳头产品了,公司已经在三板上市了 楼主加油吧支持你
MAKTY 2015-11-16
  • 打赏
  • 举报
回复
引用 6 楼 xiesq5112 的回复:
[quote=引用 4 楼 h786556226 的回复:] [quote=引用 3 楼 xiesq5112 的回复:] 敢问楼主 设想了一套AIP ,这套AIP 是什么东东? 恕在下愚昧,只听过API ,却不知AIP 是何物
楼主,这笔是找茬的,我代表你消灭它[/quote] 对不起,您权限不够,请联系CSDN 管理员,谢谢![/quote] 坐标已经定位,等待导弹发射
MAKTY 2015-11-16
  • 打赏
  • 举报
回复
引用 2 楼 Ar_Lai 的回复:
你说的不乏道理,但也过于偏激。对于业务及其繁多的一个系统来说,用现有的流行框架来开发,无论下从安全性、开发效率等方面考虑,都是不二之选。
坐标已经定位,等待导弹发射
qq_24191473 2015-11-14
  • 打赏
  • 举报
回复
想法是好的,复杂点的项目呢
加载更多回复(93)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧