本网站的设计与开发是以学习与交流为目的,不会涉及任何盈利项目,如果网站的设计或者其他代码涉及您的利益,您可以联系我,我会立即删除。
1. 开发背景
互联网的迅猛发展使人们对软件使用体验的要求越来越高,客户端软件繁琐的下载安装过程已经不能满足人们的要求,在线服务越来越得到人们的青睐。网页是人们获取在线服务的一个重要途径,通过网页,人们无需下载,无需安装,方便快捷。在当今,表情包的盛行使GIF这种轻便的动图重新占据图片领域的一席之地,GIF的制作成为人们娱乐的需求之一,而GIF的体积越来越小成为用户和电商企业共同追求的目标。此外,PDF转Word和证件照更换背景等,也是人们偶尔需要使用的功能之一,这些小功能的不常用的特性使得人们不会专门安装客户端去解决,更多的人选择找专门的某宝商家付费解决。这些都表明在线格式转换网站设计必然会拥有用户,有一定的前景。
2. 总体描述
本网站预计最终实现四大功能。
- 视频转GIF
用户首先选择视频,然后视频的指定帧进行选择,本网站将用户选择的视频帧导出为GIF供用户下载。 - GIF压缩
用户选择要压缩的GIF,然后网站将压缩好的GIF供用户下载。 - PDF转Word
用户选择PDF进行上传,然后网站将转换后的Word供用户下载。 - 证件照更换背景
用户选择证件照以及证件照更换后的背景颜色,然后网站将更换背景的证件照供用户下载。
3. 开发环境
Eclipse集成开发环境(JavaWebProject);Opencv 4.1.0;Mysql;Java Jacob库;Spire免费版库;Pdfbox库;Nodejs(配置 GraphicsMagick、ImageMagick、gm);
4. 开发约束
- 命名规则
- Java工程文件都在包com.convert 下。
- Java文件命名Severrlet文件, 名称要以Serverlet 开头。
- Java文件命名 Struct文件,名称要以 Struct开头。
- Java 文件命名 Interface 文件,名称要以 In开头。
- Java 文件命名 Interface Implement 文件,名称要以 InImpl 开头。
- 目录架构
- JavaWeb工程项目主目录
- 个人项目目录主结构
- 命名风格
-
[必须遵守] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例: _name / __name / O b j e c t / n a m e / n a m e Object / name_ / name Object/name/name / Object$ -
[必须遵守] 代码中的命名严禁直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。正例: alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3 -
[必须遵守]类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion -
[必须遵守]方法名统一使用 lowerCamelCase 风格,必须遵从 驼峰形式。
正例: localValue / getHttpMessage() / inputUserId -
[必须遵守]常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例: MAX_STOCK_COUNT 反例: MAX_COUNT -
[必须遵守]抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾
-
[必须遵守]中括号是数组类型的一部分,数组定义如下:String[] args; 反例:使用 String args[]的方式来定义。
-
[必须遵守]POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(), -
[必须遵守]包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例: 应用工具类包名为 com.alibaba.open.util、类名为 MessageUtils(此规则参考 spring 的框架结构 -
[必须遵守]杜绝完全不规范的缩写,避免望文不知义。
反例: AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类 随意缩写严重降低了代码的可阅读性。 -
【推荐】接口类中的方法和属性加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
正例:接口方法签名:void f();
接口基础常量表示:String COMPANY = “alibaba”;
反例:接口方法定义:public abstract void f(); 说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默 认实现。
- 常量定义
1.[必须遵守]不允许任何魔法值(即未经定义的常量)直接出现在代码中。
反例: String key = “Id#taobao_” + tradeId; cache.put(key, value);
- [推荐]常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包 内共享常量、类内共享常量。
1) 跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。 2) 应用内共享常量:放置在一方库的 modules 中的 constant 目录下。
反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示 “是”的变量:
类 A 中:public static final String YES = “yes”;
类 B 中:public static final String YES = “y”; A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致线上问题。
3) 子工程内部共享常量:即在当前子工程的 constant 目录下。 4) 包内共享常量:即在当前包下单独的 constant 目录下。 5) 类内共享常量:直接在类内部 private static final 定义。