`
01404421
  • 浏览: 228665 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

我写的一个简单框架,感觉不错但需要改进

阅读更多

最近公司需要做一个系统,一直来感觉使用Hibernate太麻烦,为了使用很少的功能而要去掌握那么大的东西,所以自己写了一个ORM类似的东西(以后另发帖贴代码分享),现在先把自己的框架贴出来,不知道自己做的轮子到底怎么样,而且对权限这部分没有做过,如下图:

开发情况:

 1.每个人维护相对独立的几张表,所以自己写自己的Bean和Dao

解释说明:

Bean-----规定了一些Dao需要的方法

Abstract Dao封装了权限检查和日志、异常记录

Role---角色接口

Abstract Action统一封装日志和异常

 

编程人员使用说明:

1.每个人自己写的Action必须继承自NoUserAction或者WithUserAction

2.自己写Logic层,调用自己写的Dao和Bean(必须继承Abstract Dao和Abstract ComBean)

3.自己写的Dao必须继承Abstract Dao(其中封装了常用的save update delete query等方法)

4.自己写的Bean必须继承ComBean(其中封装了一些要用到的方法)

现在存在的问题:

1.每个人自己的Action中要操作数据库必须要传入Role接口下的对象,如图:DemoAction要操作必须传入WithUserAction对象,

   这样每个Action中都必须New一个Role对象,是不是对性能造成影响

2.Logic(业务)层感觉可以不要...搞不清....

说明:我去年才毕业,没有多少开发经验,只是感觉这样能加快开发速度而且统一管理权限、日志、异常处理等,请大家多提意见!!

 

在各位的指点下,我修改了一部分设计,见主题:我写的一个简单框架(改进版)

 

  • 大小: 26.5 KB
分享到:
评论
7 楼 01404421 2009-05-26  
zozoh 写道
说说我的一点个人看法,LZ别介意:

1. query 如果返回 ResultSet 的话, 那么必然得让调用者关闭 Connection 吧,这样会可能造成连接泄漏
2. 针对这样的 Dao ,调用者还是的拼装大量的 SQL ,尤其是复杂查询的时候,未必让我减轻多少工作量

谢谢ZOZOH的关注,其实我也在头痛第一个问题:
1.我想给程序员提供比较灵活的一个query方法,但是这样就导致必须让程序员自己调用方法来关闭Connection ,其实也可以直接返回封装好的List<Bean>,但是这样对内存是一个很大的占用,不清楚选择哪种方案....
2.程序员拼装SQL其实用的不多,只有在需要比较特殊的query和execute方法时需要自己拼装,其它常用的方法我这个Abstract Dao中已经使用反射完全实现,程序员只需调用就行了
6 楼 zozoh 2009-05-26  
说说我的一点个人看法,LZ别介意:

1. query 如果返回 ResultSet 的话, 那么必然得让调用者关闭 Connection 吧,这样会可能造成连接泄漏
2. 针对这样的 Dao ,调用者还是的拼装大量的 SQL ,尤其是复杂查询的时候,未必让我减轻多少工作量
5 楼 01404421 2009-05-26  
zozoh 写道
我觉得你的思路挺清楚的,这样的结构也挺清晰的。
New 一个对象的消耗,在 Java 中可以忽略不计,你大可放心。

这个框架应该很贴合你们的业务,我觉得如果弄出来,肯定很不错。关键是,你打算怎么实现你的 AbstractDao 呢? 能贴一下 AbstractDao 的接口函数定义吗?


封装了一些常用的数据库操作方法,尽量让程序员少写SQL代码,而且这样可以容易控制权限
protected final int save(Bean bean) ;
/*
	 * 修改方法 id为要修改的数据ID,paraName为属性名称,paraValue为新值
	 * 返回1为操作成功 0为没有执行操作 -1为出异常了
	 */
	public final int update(String id, String paraName, String paraValue) ;
/*
	 * 根据ID查询方法 返回Bean对象
	 */
	public final Bean findById(Object id) ;
/*
	 * 提供一个可以自定义SQL明了的query方法
	 * 此SQL语句允许跨操作权限查询其它表,所以整个SQL语句由具体的Dao来组成
	 * 参数1:String preparedSsql--->preparedSql语句
	 * 参数1:Object[] values--->preparedSql语句中的参数队列
	 * 没有调用closePreparedStatement 应该显式的调用this.freeConnection()释放连接
	 */
	protected  ResultSet query(String preparedSsql,Object[] values) ;
/*
	 * 提供一个可以自定义SQL明了的Execute方法
	 * SQL命令封装了“update ”+表名称,所以使用时只需传入“set”及以后的字符串
	 * 参数1:String preparedSsql--->preparedSql语句
	 * 参数1:Object[] values--->preparedSql语句中的参数队列
	 * 返回1为操作成功 0为没有执行操作 -1为出异常了
	 */
	protected int execute(String preparedSsql,Object[] values) ;
/*
	 * 查找方法,根据ID和列名来查找属性的值
	 * 参数1:String id--->记录id
	 * 参数2:String paraName--->列名称
	 */
	public Object getParaValueById(String id,String paraName);
/*
	 * 删除方法,传入对象ID,int或者String皆可
	 * 返回1为操作成功 0为没有执行操作 -1为出异常了
	 */
	public final int delete(Object id) ;

4 楼 zozoh 2009-05-26  
我觉得你的思路挺清楚的,这样的结构也挺清晰的。
New 一个对象的消耗,在 Java 中可以忽略不计,你大可放心。

这个框架应该很贴合你们的业务,我觉得如果弄出来,肯定很不错。关键是,你打算怎么实现你的 AbstractDao 呢? 能贴一下 AbstractDao 的接口函数定义吗?
3 楼 01404421 2009-05-25  
mccxj 写道
扫描扫描:
AbstractNoUserAction? 不需要登录的Action?使用个Protectable的接口更好,没有实现这个接口的就是nouser的,可以自己发挥。。
权限怎么只有角色?用户呢?最基本也得有个rbac简单模型把。DemoAction怎么直接调用Role了,应该使用业务逻辑隔开
不大明白AbstractDao和权限检查,日志,异常统一处理有什么关系
Bean那块要实现hiberante那样类似的功能,可不容易

Action的涉及范围太广,分层变得没意义了。
业务层更不能不要。。dao层在强大的orm/sqlmapping下反倒可以省略
hibernate太麻烦,可以考虑ibatis,一天之内应该可以上手
图用visio画的么?你这个已经整了好几大块了。可以考虑用个整体的简图配上各个部分的详细点的设计,手工画画也不错

谢谢指导,
我的权限其实是这样控制的,角色中封装了操作权限,因为所有Bean都是可以调用Abstract Dao的子类来操作的,为了防止跨权限操作表,所以在Abstract Dao中对权限进行检查,这样导致一层层的直到Action也必须往下传角色.....
还在困扰中,Abstract NoUserAction中Role是计划要传入IP,还要记录操作日志记录
角色中带有ID的,可以区分用户,这样同时也可以对角色的操作进行处理(比如积分和操作日志等,同时数据库操作异常也可以在这里处理)
至于Action的涉及范围,我对这个还没有多少概念,还需要学习
业务层方面,我们的操作逻辑比较简单,同志们都建议不需要了(我们大家都没有开发经验),就是类调类传个参数
至于画图还是刚学的,呵呵,是用Visio做的,以前也没有画图的习惯,要慢慢学习!
2 楼 mccxj 2009-05-25  
扫描扫描:
AbstractNoUserAction? 不需要登录的Action?使用个Protectable的接口更好,没有实现这个接口的就是nouser的,可以自己发挥。。
权限怎么只有角色?用户呢?最基本也得有个rbac简单模型把。DemoAction怎么直接调用Role了,应该使用业务逻辑隔开
不大明白AbstractDao和权限检查,日志,异常统一处理有什么关系
Bean那块要实现hiberante那样类似的功能,可不容易

Action的涉及范围太广,分层变得没意义了。
业务层更不能不要。。dao层在强大的orm/sqlmapping下反倒可以省略
hibernate太麻烦,可以考虑ibatis,一天之内应该可以上手
图用visio画的么?你这个已经整了好几大块了。可以考虑用个整体的简图配上各个部分的详细点的设计,手工画画也不错
1 楼 ztbzg 2009-05-25  
能自己写框架,相当佩服。希望有高手出来指正,我也在学习中。

相关推荐

    Wing是一个极小响应式CSS框架

    虽然 Wing 主要是 CSS 框架,但它也考虑到了 JavaScript 开发者的需要。Wing 的组件通常包含对应的 JavaScript 插件,以实现更复杂的交互效果。这些插件遵循模块化和可扩展的原则,可以方便地与其他库或框架集成,如...

    一个简单实用的数据库操作框架

    前言学习JDBC以来一直想实现一个简单的封装来方便编程但是由于水平有限一直没有较好的办法,看了IBM开发网上的两篇文章以后感觉作者的设计思想很好一定能扩充成一个实用的JDBC封装。所以我在文章提供的源码基础上加...

    数据库开发框架(PDF版)

    注意,此版本不包含源代码,只是一个绿色的可以随时打开的版本,开发工具为:delphi7+sqlserver2000我的PDF(Perfect Developer Frame),想要 简单,快速,健壮,因此我用的还是C/S结构,因为客户可不管你用的是什么最高新的...

    C#编的一个不错的时钟!绝不后悔!

    描述中的“一个自己做的简单时钟,自己感觉还不错,值得相互学习!共同进步!”暗示了这是一个个人项目,开发者可能是一位编程爱好者或者初学者。他们通过这个项目锻炼了自己的编程技能,并认为这个时钟程序设计得既...

    自己动手写操作系统(含源代码).part2

    第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病,作者本人可能很清楚原委,但写得太简略,以至于读者看来未必清晰。第二,我自己想把这个圈画圆。...

    自己动手写操作系统(含源代码).part1

    第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病,作者本人可能很清楚原委,但写得太简略,以至于读者看来未必清晰。第二,我自己想把这个圈画圆。...

    Jsp网上书店系统 第一个学期的大作业

    自己Jsp第一个学期的大作业,里面基本有...登陆尝试次数过多就出现验证码(有待改进提高效率),由于还没有学框架,所以里面没有框架,也没怎么用STL,想看基本的jsp的话就参考参考,页面感觉挺炫的,符合三层架构的

    大学第一个月总结.docx

    通过这样的结构,我能够更加清晰地看到自己一个月来的成长和需要改进的地方。因此,在今后的生活中,我也会按照这一框架来撰写我的月度和年度总结,以及制定未来的学习计划。 大学生活不仅仅是学习,更重要的是学会...

    用VS做得简单 论坛

    【标题】"用VS做得简单 论坛"指的是使用Visual Studio(VS)开发的一个简易论坛项目。Visual Studio是一款由微软公司推出的集成开发环境(IDE),它支持多种编程语言,包括C#、VB.NET等,是ASP.NET开发的主要工具。...

    用C#写的图片浏览器!

    ”这说明这是一个初级开发者的作品,可能功能相对简单,但开发者对其初步成果感到满意。作为一个图片浏览器,它可能具备基本的图片打开、缩放、旋转、前后翻页等常见功能。开发者寻求他人的建议和反馈,这有助于提升...

    Swift 实现的 Web Framework,感觉 Swift 要逆天了.zip

    "Swift 实现的 Web Framework,感觉 Swift 要逆天了.zip"这个压缩包文件,暗示我们它包含了一个用Swift编写的服务器端Web框架,这可能是开发者们用来展示Swift在Web开发领域的潜力。 Vapor是这个压缩包中提到的Web...

    swift-一个用于在MacOS上平滑你的鼠标滚动效果的小工具

    5. **用户界面**:尽管这个小工具可能主要是后台运行,但可能仍需要一个简单的用户界面来配置和启用/禁用此功能,这可以通过Swift的Interface Builder和Auto Layout来实现。 总之,这个小工具展示了Swift在创建...

    struts-2.3.1.2

    Struts 2.3.1.2是该框架的一个特定版本,包含了丰富的功能和改进,旨在提高开发效率和应用程序的稳定性。在这个版本中,所有的开发用jar包都齐全,意味着开发者可以立即开始构建基于Struts 2的应用,无需额外寻找或...

    Hbase Thrift Manul

    总之,HBase Thrift为那些不想使用Java的用户提供了一种与HBase交互的方法,它支持多种编程语言,并提供了一个相对简单的IDL,但同时也牺牲了一些复杂语言特性。开发人员需要关注Thrift API与HBase的关系,以及如何...

    很不错得ajax课件

    5. **一个初步的开发框架**:结合以上步骤,形成一个基本的AJAX开发流程。 #### 7.3 简单的示例 - **数据校验**:通过AJAX发送请求到服务器验证输入的数据。 - **级联菜单**:根据用户的选择动态加载相关选项。 #...

    蓝色斜纹个人博客CSS模板_蓝色 斜纹 简单 个人 博客.rar

    总的来说,“蓝色斜纹个人博客CSS模板”提供了一个基础但不失风格的框架,可以帮助博主快速打造一个具有个人特色的在线空间。无论你是新手还是经验丰富的博主,都可以从中找到灵感并根据自己的需求进行调整,以创建...

    C++开发漂亮的软件界面

    这个库的目标是使开发者能写出看起来和感觉上都像本地应用的代码,同时保持跨平台兼容性。 3. **GTK+**:GTK+是一个广泛使用的开源GUI工具包,它也支持C++接口。GTK+提供了丰富的组件库,并且通过GObject系统实现了...

    C#微软培训资料

    一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET ...

Global site tag (gtag.js) - Google Analytics