Jeecsm使用框架包括:springMVC,HIbernate(数据持久层框架),Quartz(作业调度框架),ant(自动编译构建框架,在自动生成模版类时用到),Httpclient,c3p数据池,ehcache缓存框架,dom4j框架(解析xml),DWR框架(该框架可以通过js调用java函数),Lucene全文检索框架,Jcaptcha验证码生成框架,sl4f和Log4j日志框架,Jmagick图片处理框架,JODConverter文件转化框架及FCK编辑器及Freemarker框架

Jeecsm框架包结构:

Jeecsm有三大主要包分别为core(核心包),common(公共类库包)和csm(网站主要包)

Action:页面交互层包,包含与页面交互类

Dao:DAO层包,包含封装数据操作类

Web:包含与页面有关的拦截器、过滤器、校验器等

Security:包含与安全有关联的类

Manager:业务逻辑层包,包含业务处理类

Entity:模型层包,包含数据模型类

Tpl:包含模版文件管理类,包括上传,删除等

Lucene:包含整站全文检索处理类

Staticpage:静态页面处理模块,包含与静态页面生成有关的类,包括该功能模块的页面交互层,DAO层和业务逻辑层包对象

Statistic:统计功能模块,包含与统计相关的处理类,包括该功能模块的页面交互层,DAO层和业务逻辑层包对象

Task:包含定时处理任务,定时器等

Tmplate:包含模版生成类,及模版文档

Common包都是一些工具包,就不详解释

Core核心包:封装与系统架构基础,如:登录,文件上传,图片模版保存等

Jeecsm模型包架构(个人觉得比较好的包结构设计,符合面向对象思想)

Bhm包:包含全部hibernate配置文件,将配置文件和实体类分离

Base包:该包下全部对象都是抽象类,其封装数据模型及其基本操作,与模型类一一对应

模型类:继承Base包对应的抽象类,主要封装一些额外数据操作

总结:

1. 数据模型包中将Hibernate配置文件抽到一个包中管理,有利配置文件维护,将逻辑操作和数据模型分离,有利系统维护和问题域定位(这一点我们可以借鉴)

2. 混合式包结构设计,网站业务逻辑按分层结构设计,而功能使用模块结构。前者灵活性和性能高但不利于维护,后者维护性和伸缩性好但不灵活。这导致站内业务不同层之间高耦合,不利于站内业务维护。

3. 函数体中构建数据库操作语句,应视情况而定,与数据库交流频率多的语句应当作类的静态属性存放,不应该也放在函数体中,这将导致,内存消耗大,JVM虚拟机会频繁调用CG回收器。(如:用户访问)

4. 动态构建sql语句应该使用StringBuilder或StringBuffer(线程安全),不应该在函数中通过“+”连接(除非是一条语句)

5. 增加一个web包用来存放与容器有关的拦截器或过滤器,有利于维护和问题域定位(可以借鉴)

阅读jeecms源码总结的更多相关文章

  1. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  2. newsstand杂志阅读应用源码ipad版

    一款newsstand iPad杂志阅读应用源码(newsstand在线下载/动态显示等)可以支持在线下载/动态显示等  ,也是一款newsstand iPad杂志阅读应用源码.运行之后,会在iPad ...

  3. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

  4. 如何阅读mysql源码

    在微博上问mysql高手,如何阅读mysql 源码大致给了下面的一些建议: step 1,知道代码的组织结构(官方文档http://t.cn/z8LoLgh: Step2: 尝试大致了解一条sql涉及 ...

  5. 如何阅读jdk源码?

    简介 这篇文章主要讲述jdk本身的源码该如何阅读,关于各种框架的源码阅读我们后面再一起探讨. 笔者认为阅读源码主要包括下面几个步骤. 设定目标 凡事皆有目的,阅读源码也是一样. 从大的方面来说,我们阅 ...

  6. 如何阅读Java源码?

    阅读本文大概需要 3.6 分钟. 阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃< ...

  7. 早前阅读live555源码做的笔记

    早前阅读live555源码的时候做了一些简单的笔记.现在看来那个时候对C++的理解还是不够,还有很多不足.当时对很多名词也不是很熟悉,对一些类的描述也很生硬,所以笔记中有一些不通畅之处. 阅读live ...

  8. 如何阅读 Redis 源码?ZZ

    原文链接 在这篇文章中, 我将向大家介绍一种我认为比较合理的 Redis 源码阅读顺序, 希望可以给对 Redis 有兴趣并打算阅读 Redis 源码的朋友带来一点帮助. 第 1 步:阅读数据结构实现 ...

  9. 阅读 Android源码的一些姿势

    日常开发中怎么阅读源码 找到正确的源码 IDE 是日常经常用的东西,Eclipse 就不说了,直接从 Android Studio(基于 IntelliJ Community 版本改造)开始. 我们平 ...

随机推荐

  1. text-html 转译

    var HtmlUtil = { 2 /*1.用浏览器内部转换器实现html编码(转义)*/ 3 htmlEncode:function (html){ 4 //1.首先动态创建一个容器标签元素,如D ...

  2. 固定定位fixed,绝对定位absolute,相对定位relative;以及overflow

    固定定位position:fixed /*固定定位 1.定位属性值:fixed 2.在页面中不再占位(浮起来了) 3.一旦定位后,定位的布局方位 top.bottom.left.right都能参与布局 ...

  3. 夏令营501-511NOIP训练18——高三楼

    传送门:QAQQAQ 题意:定义矩阵A与矩阵B重复,当且仅当A可以通过任意次行列交换得到B,例如下图A,B即为合法矩阵 现求对于$n*n$的矩阵有多少个不重复的矩阵 数据范围: 对于10%的数据 N≤ ...

  4. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  5. python调用scikit-learn机器学习

    不支持深度学习和强化学习 numpy介绍: np.eye(n)生成一个n维单元数组 数据预处理: iris数据加载 from sklearn import datasetsiris = dataset ...

  6. ThinkPHP引用第三方库

    Thinkphp引用第三方库的方法例如引用购物车:在项目Home目录下,新建一个文件夹(以下是我自己的demo) Tool文件夹,在Tool文件夹中创建Tool.class.php文件.这个和你控制器 ...

  7. 【默默努力】react-drag-grid

    先放项目地址:https://github.com/Bilif/react-drag-grid 项目运行效果 感谢无私开源的程序员 先看项目入口文件 //index.js import React f ...

  8. [JZOJ3297] 【SDOI2013】逃考

    题目 我发现我现在连题面都懒得复制粘贴了-- 题目大意 在一个矩形中有一堆点,这堆点按照以下规则将矩形瓜分成一堆块: 对于每个坐标,它属于离它最近的点的块. 一个人从某个坐标出发到矩形外面,求经过的最 ...

  9. 使用vue-awesome-swiper滑块插件

    基于之前写的vue2.0 + vue-cli + webpack 搭建项目( vue-awesome-swiper版本:3.1.3 ,swiper4,如果成功后没报错,但不显示分页样式,可能版本对不上 ...

  10. 使用 data-* 属性来嵌入自定义数据:

    <!DOCTYPE html> <html> <head> <script> function showDetails(animal) { var an ...