个人层面
- JFinal入门
做了这么久项目,对JFinal框架似懂非懂,趁这个机会我们来一起深入理解一下。
1.1 JFinal五大组成部分
1.1.1 Controller
Controller 是 JFinal 核心类之一,该类作为 MVC 模式中的控制器。基于 JFinal 的 Web 应 用的控制器需要继承该类。Controller 是定义 Action 方法的地点,是组织 Action 的一种方式, 一个 Controller 可以包含多个 Action。Controller 是线程安全的。
在本项目中,config配置路由,将“/”映射到HomeCtrl这个控制器
相关名词解释:
MVC模式:是业务模型(model)-用户界面(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑(后端)、数据(数据库)与界面显示(前端)分离的方法来组织代码,将众多的业务逻辑聚集到一个部件(调用方法)里面,在需要改进和个性化定制界面及用户交互(更改页面)的同时,不需要重新编写业务逻辑(重写后端),达到减少编码的时间。
Controller控制器:指控制器接受用户的输入并调用模型(后端)和视图(前端)去完成用户的需求,控制器本身不输出任何东西和做任何处理。
“基于JFinal的Web应用的控制器需要继承该类”在本项目中的体现。
Action:在controller中定义的 public 无参方法,是请求的最小单位。
1.1.2 plugin
JFinal拥有Plugin体系结构,扩展性强。
在本项目中,ActiveRecord 和EhCachePlugin是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置它们.
相关名词解释:
ActiveRecord:JFinal 最核心的组成部分之一,通过 ActiveRecord 来操作数据库,将极大 地减少代码量,极大地提升开发效率。
EhCachePlugin:JFinal 集成的缓存插件,通过使用 EhCachePlugin 可以提高系统的并发 访问速度。
1.1.3 render
render系列方法将渲染不同类型的视图并返回给客户端。
通常情况下使用 Controller.render(String)方法来渲染视图,使用Controller.render(String)时的 视图类型由JFinalConfig.configConstant(Constants constants)配置中的constants. setViewType(ViewType)来决定,该设置方法支持的 ViewType 有:FreeMarker、JSP、Velocity, 不进行配置时的缺省配置为 FreeMarker.
在本项目中,config配置视图类型(viewType)为JSP
常用的render方法:renderJson(jhm)
将 JsonHashMap对象转换成 json 数据并渲染,再返回给客户端
1.1.4 Handler
Handler 可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。
在本项目中,config配置Handler为空
1.1.5 Interceptor
Interceptor 可以对方法进行拦截,并提供机会在方法的前后添加切面代码,实现 AOP 的 核心目标。Interceptor 接口仅仅定了一个方法 void intercept(Invocation inv)。
在本项目中,config配置Interceptor
1.2 JFinal架构图解析
1.3 JFinal主要特点之四
- 熟练运用SQL
项目CRUD式的业务需求决定了我们将大量运用SQL的知识,比如模糊查询、关联查询、子查询等等。通过本次项目,我们对SQL的使用更加熟练,但写出来的SQL语句并无法实现最高效的查询。只有在以后的项目中,多写多思考,才能有更大的进步!
2.1 SQL生疏知识总结
- !=等价于<>
- LIKE条件(模糊查询)
- IN和NOT IN(符合列表范围中的数据)
- BETWEEN ... AND ...(符合某个值域范围的数据)
- ANY和ALL条件(大于最大、小于最小....)
- DISTINCT过滤重复
- 聚合函数(MAX和MIN、AVG和SUM)
- GROUP BY (按什么分组)
- HAVING (进一步限制分组结果)
- 查询语句的执行顺序(重要!)
- 笛卡尔积
- 内连接(返回两个关联表中满足连接条件的所有记录)
- 外连接(不仅返回满足连接条件的记录,还将返回不满足连接条件的记录)
2.2 SQL查询详解
- Tomcat 部署
3.1 rebuild project
3.2 copy out/production下的目标文件
3.3连接远程服务器
3.4复制到目标位置,并开启Tomcat部署
- Git使用
4.1 频上传/更新
每次上传前要更新,每写完一个方法,用浏览器测试后无问题立即上传并提醒大家更新。
4.2一般冲突解决方法
碰到冲突先stash,再unstash基本都能解决。
或者是先将冲突的本地文件备份,将本地的改成与服务器一致,pull后再进行替换。
- 非技术方面的能力提升
5.1沟通表达能力
在项目开发过程中,每天与老师、同学们沟通交流项目的问题,给同学们讲解Findbugs和AJCG等等。沟通表达能力逐步提高,但还是有很大进步空间。从一开始表达的不够准确,到现在相对准确了。特别是刚开始和焦老师接触时,我好几次将问题说错,降低了效率。现在明白了碰到任何问题应该这么描述:1.现状是什么?2.目标是什么?3.应该改哪里?
5.2协作管理能力
与前端对接接口,联合测试,一起改bug,遇到不懂的互相请教
管理接口、数据库、bug、任务,使每个人各司其职,稳步推进项目
5.3良好的心态
在项目开发过程中,保持良好的心态很重要!
在和别人沟通时,一定要保持足够的耐心,学会表达的同时也要学会倾听。
要学会谦虚,不懂的问题要敢于向他人请教,彼此互相学习,共同进步。
当自己负责的模块出现bug时,要淡定,要明白“完美的程序不是一次就能写出来的”,而是经过多次打磨、纠错,最终才能达到相对完美。
团队层面
- 开发过程中的不足之处
6.1数据库问题
- 很多数据表中的字段没有注释(必须得有),让人看不懂。
- 数据表有改动时,没有及时更新到远程数据库和每个人的本地库,同时记录改动请况。
- 测试功能时经常因为数据“不合理”导致bug百出,极其浪费时间。
6.2界面设计问题
PC端的界面设计频繁改动,原因在于初期规划时考虑的不够周全。
(例如:“全部”刷新建、工资的全职兼职等等)
希望在下个项目中设计页面时能够更多地站在用户的角度思考,设计更加合理。
6.3后端代码问题
1.开发顺序不合理(个人认为应先做“登录权限设置”,再做其他)
2.代码不写注释!!
3.代码不够精简、规范。
6.4前后对接问题
- 接口文档错误不断,无疑增加了沟通的时间成本。
- 前端拿到接口,如果出现bug,应先判断是前端/后端的(ret/F12),再进行处理。
- 对今后开发的建议
7.1后端代码
- 在开发前,写一个开发工具文档。
- 代码必须要有注释!
- 变量命名语义化。
- 每写完一个类,要及时用AJCG和FindBugs插件进行检测并修改。
7.2 bug/任务管理
使用bugdone系统管理bug/任务,分配到个人,解决后要及时勾选“完成”。
7.3前后端对接
使用eolinker AMS系统记录接口文档,分配到个人,文档有改动要及时更新。
7.4定时开会
建议每一或两周项目组开一次会:
一是可以沟通项目存在的共性问题。
二是锻炼大家的表达能力。
只有多进行有效的沟通,团队成员之间才能越来越默契。