抛弃框架,走自己的路(一个纯粹JAVA的开发构思)_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3227 | 回复: 0   主题: 抛弃框架,走自己的路(一个纯粹JAVA的开发构思)        下一篇 
linjun
注册用户
等级:中校
经验:2221
发帖:176
精华:2
注册:2013-1-6
状态:离线
发送短消息息给linjun 加好友    发送短消息息给linjun 发消息
发表于: IP:您无权察看 2013-1-6 16:14:35 | [全部帖] [楼主帖] 楼主

俗话说“不要在一棵树上吊死,到周围的树上试试”,我们在层出不穷的框架上滴血流汗,被框架框的严严实实。
    在这里有必要提倡写自己的代码写自己的思想,别人的东西虽好但那是有环境的不是所有情况下都完美的,我们可能背离了计算机语言的初衷——实现自己的想法。这里我和大家简单讨论下tomcat下开发的一种自己想出来的模式,用简单的方法实现MVC。

第一步:用静态html+css+div+js开发静态页面,反复修改满意后继续下一步(此可由美工实现)

第二步:封装自己的持久化工具。运用DAO模式+工程模式对数据库进行封装,实现持久化,再次强调对象的持久化其实就是把对象属性存到数据库,所谓持久化方法就是封装JDBC增删改查等基本功能的类,调用时传入一个带属性的类,然后封装类取得传入类的属性并调用自己的方法把数据存入数据库,这就实现了传入类的持久化。

定义表Vo包:      Tab1Vo(属性和表列名对应)   Tab2Vo             Tab…Vo

DBConnection.class(DB连接类,以下省略.class)


调用DBConnection                                     |

 SQLbase(增删改查…类,参数决定SQL访问表)
|
———————————-
|


DAO定义包:    Tab1Dao(对应DB表)   Tab2Dao        Table…Dao               |

 |                    |                |                  |


Dao实现      Tab1DaoIm(Tab1Vo)  Tab2DaoIm(Tab2Vo)  Tab…DaoIm(Tab…Vo)  <—-  继承SQLbase

 |                   |                 |
———————————————————
|


工厂包:                           factory(实例化工厂)

     在调用时只用到 定义表Vo包 和 工厂包,new一个表对应Vo类,调用factory实例化表对应DAO对象,因为实例化对象继承了SQLbase所以它具有SQLbase定义过的任何增删改查…操作,一旦到运用时你会发现,我们只是new了一个Vo类然后用工厂实例化一个对象并传入Vo实现所以数据库操作,这就是所谓对象的实例化。
     现在来分析封装代码量,
       1.定义表Vo:其实就是以表名为属性建立一个简单类并生成getter和setter,没了。
       2.DBConnection:一成不变的JDBC连接数据库,核心不过10行代码。
       3.SQLbase:这个类可能要复杂点,现所有需要的数据库操作,一般就增删改查…(分页在此通过SQL决定),你会发现由于它是从DBConnection返回DB连接的所以具体DB被分离,这个类以后可以拿到任何地方去操作DB,只要修改一下DBConnection。
       4.Dao实现:由于SQLbase封装了N多操作,但你的某张表并不需要,这时可以在这里裁剪,由于继承了SQLbase,只要根据Vo传参调用SQLbase方法就实现了,代码小于30行。
       5.factory:就是简单返回Dao实例,一个调用没了,代码很少。
     在DB中可以用统一的表命名法比如Table1,Table2,Table3,Table……并在注释中体现具体对应,这样你的封装以后可以在任何类似场合用,根据你SQLbase功能的强大,你的封装不比Hibernate差,关键是这是你写的你对它了如指掌。

第三部:用servelet取代Struts。Struts给我们什么好处?也就是把跳转弄成了配置文件而已,但写配置文件你头不大么?而且Struts得传参时你郁闷么?还是URL直接传参来的靠谱吧。

1.创建页面控制servelet:

servelet(用于跳转和控制的servelet)
|
|


     获取URL参数id…并过滤(这里id…指URL传的多个参数),如非法跳转错误jsp页面

 |
|


               if(id1…){ 调用页面bean1(页面bean下面会讲)获得数据,跳转到相应jsp }

 |
|


               if(id2…){ 调用页面bean2获得数据,跳转到相应jsp }

 |
|


               if(id3…){ 调用页面bean3获得数据,跳转到相应jsp }

 |
.
.
.


               else{ 跳转到错误jsp页面 }

第四步:实现页面Bean

2.实现“页面bean”,众所周知JAVA是面向对象的,这里的“页面bean”对象就是JSP页面,页面bean里提供了对应jsp页面所需所有动态数据,包括下页id参数、导航路径等一切动态的数据,这样的好处是你在第一步建立静态网页时只要建立几个模板,然后传参调用,根据参数显示不同内容,但是你调用的始终是一个JSP不同的是里面的内容,这样就重用了JSP。
  所有的数据库调用和业务逻辑都是在页面Bean里实现的,页面Bean里有N多属性,对应了JSP页面各个动态数据,在页面Bean中可以调用其他功能Bean���举例:

PageBean1
|
————————————————————————————————        ……
|           |            |           |             |            |


属性: 当前页面导航   页面内容List    日期      下一页id     上一页id       作者    ……

3.实现页面bean工厂。PageBeanFactory可以实例化并返回所有页面bean。

    现在我们来运用:在显示页面只需导入页面bean工厂包 和 页面bean包,这和持久化封装其实是一个道理,new一个页面Bean调用时用工厂根据参数实例化当前页面Bean,然后用<%=bean.属性 %>的方式来显示页面内容。如果要修改显示内容只需要修改页面Bean,显示层不变,任何数据来源、逻辑都在页面Bean里解决,完全和JSP显示层解耦。

第五步:建立过滤器。所有安全问题,权限问题,编码问题,一律放在过滤器里过滤,不合法的一律跳转错误页面。每当用户进入把过滤IP的专用Bean实例引用传给其Sessen,一旦用户非法操作达一定数量拒绝其访问。

第六步:配置服务器安全,在web配置中配置404、505、I\O异常等一律跳转错误页并设置错误页3秒后返回主页。杀掉地址栏前面的小猫,建立自己的favicon.ico并配置WEB文件,配置跳转servelet后缀名,影藏后台实现语言。

总结:到这里你会发现:
      1.你的代码和BD或其它数据来源完全解耦
      2.和显示层JSP完全解耦
      3.你的持久化可以在任何场合(看你封装能力)复用
      4.servelet担当控制,没有任何的配置,修改非常方便,只要修改servelet里if语句,想跳那跳那。

这里只是我个人的心得,“我写我的代码,我写我的思想”,让我们抛弃框架的束缚吧,没有框架你一样可以做到,我相信你一定有更好的实现方法。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论