为公司其他部门做的技术分享,在一定程度上也算是在公司内部推广Python。不过很不幸的是由于某些原因,该分享不幸夭折。
PPT在这里:http://vik.haoluobo.com/static/slide/oa/
下面是更为详细的文案。
OA平台概况
- Nginx
- 使用Nginx作为前端服务器,负责静态资源处理及HTTP请求分发
- 在需要扩展到多服务器时,Nginx可以用做负载均衡服务器
- UCenter(统一认证中心)
- 统一的用户登陆管理
- 用户信息存储在公司的AD域中
- OA
- 业务平台,公司的行政、人力等各项OA业务都在该平台搭建
- 同携程、inTrack平台对接实现相关业务
- 数据的汇总及分析
OA构架
- 基于Django搭建的可插拔APP平台
- 核心APP(基础APP)
- 核心APP包括:UI框架、权限认证、流程引擎、用户、员工、部门管理等
- 作为系统的核心模块,需要被其他各个业务模块所用到。
- 为具体业务做支撑,大多不同具体业务相关
- 核心模块在系统上线后将不太做改动,只需要少量的核心开发人员维护即可
- 核心模块也是可复用的
- UCenter同OA就是公用的相同的UI框架
- 可插拔APP(业务APP)
- 可插拔APP包括:人力模,请假出差、财务模块,报销、预算、行政、固定资产管理…
- 同具体业务相关,依赖核心模块。
- 业务需求多,且易变,在平台建设初期难以做周全的计划。
- 各个业务模块相对独立,各业务模块可独立开发。
- 多个业务模块可由多人并行开发。
- 核心APP(基础APP)
Django
- The web framework for perfectionists with deadlines.
- 全功能的Web开发框架,依托Python提供快速开发的支持
– 提供模板、控制器、URL路由、表单、验证、ORM等各项Web开发需要的基础功能
– ORM及其强大,即使不懂SQL也可使用。
– 支持数据库的版本管理,并可自动更新线上数据库结构
– 模板支持继承清晰易用,对前后端分离提供很好的支持。- 成熟的社区环境,大量现成的APP可用
- 被广泛应用,有成功易用范例:Instagram、OpenStack
流程引擎
- 采用Python自主开发
- 编码同配置结合在确保使用便携性的同时确保的功能的强大
- 表单、业务处理逻辑编码实现
- 数据模型通常变动不大,采用配置方式实现不但实现复杂,也不会能为开发维护带来多少便利
- 流程常用的,同意、驳回、打回、撤销等基础操作流程引擎已自动实现,不需要额外开发。
- 如在流程流转需要进行特殊操作,需用代码给出对应的实现。
- 比如新员工入职流程结束后需要自动在系统中创建员工账号等
- 配合代码生成器的使用,对于标准流程编码工作流程只需要完成数据模型的设计即可。
- 流程流转用配置实现
- 流程的审批节点,审批人变动概率较大,采用编码方式实现既不方便又不灵活
- 流程流转的功能需要比较清晰,使用配置方式即可比较好的满足需求
- 流转方式:抢先,会签
- 流程节点的审批人、周知人、权限分享。
- 流程分支支持
- OA上所有流程都基于流程引擎开发
- 表单、业务处理逻辑编码实现
- 提供代码生成工具生成流程框架
- 对于简单的流程,只需要实现数据模型即可生成完整的业务代码
Why
-
Why
-
Python
- Python is powerful… and fast;
- 这里的快更多的是开发速度快。语法丰富,简洁
- 开发效率高是我们选择Python的一个重要原因。
- 信息部就2人,需要负责需求整理、设计、开发、测试所有工作,对开发效率要求非常高。
- 不需要编译,启动时间快节约开发时间
- 一个大Java项目编译要超过一分钟,Web服务器启动又会超过一分钟
- OA对比原有的KM。KM启动时间超过1分钟,OA可在5秒内完成重启。
- Python本身并不慢,
- 真正影响性能的代码所占总代码的比重很少。
- Python可方便的同C集成,用C扩展性能
- 注:使用Cython可直接在Python里写C代码以提高性能
- 目前不少性能敏感的库都采用C扩展的方式进行加速,方案成熟
- plays well with others;
- 对C友好,使用ctypes可直接使用C接口的动态库
- 很多软件都有提供Python接口。如:OpenCV、MATLAB
- runs everywhere;
- 支持几乎所有的操作系统(包括各类嵌入式系统)
- is friendly & easy to learn;
- 非常容易入门。对有经验的开发者,花一天时间熟悉语法就可直接使用
- is Open.
- Python的第三方资源足够丰富,应用也足够广泛
- 有很多采用Python的成功应用
- OpenStack、Dropbox、Youtube、Mercurial
- 虽然比不上Java,但Python的资源也非常丰富。
- Django(Web)、Cython(在Python中直接写C)、NumPy(可选计算)、PyQT(UI)、QPython(Python on Android)
- 有很多采用Python的成功应用
-
Python无所不能,但并不适合做所有事情。比如Android移动端的开发还是用Java更合适
-
开发效率高
- 信息部人少,需要快速实现需求
- Java严谨、Java有接口等概念,在大项目协作时更容易。但由此带来的开销是在小团队情况下开发效率更低。
- Python is powerful… and fast;
- Django
-
- Why Not
- Java
- Java严谨、Java有接口等概念,在大项目协作时更容易。但由此带来的开销是在小团队情况下开发效率更低。
- 信息部是个小团,Java带来的好处不如优点大。
- 即使是一个大团队,也可通过模块化的方式来减少规模化带来的沟通开销。除阿里这样的超大公司外,很多时候Java都不是一个很好的选择。
- Java在Web开发方面一直是由多个开源项目所推动,本身就缺乏一个很好的体系。
- Java的各个开源项目独立发展,在开发初期并未仔细考虑过如何同其他项目协作。
- Java主流实现都是围绕如何实现一个超大规模项目来设计,对小项目来说负担太重。
- 使用Java实现一个非常小的功能也需要写大量的代码及超多的XML配置。现阶段Java开发已经简化很多,但相比Python依旧太过繁琐。
- Node.js
- 近年来前端技术发展非常迅速。
- 前端开发只能用JS,因此会JS的群体非常广泛。
- Chrome V8,Node.js将JS引入服务端,收到广大前端爱好者的支持,迅速发展。
- Node.js天生异步,有着不错的性能。
- 使用callback实现异步,大量的callback导致代码不容易理解。
- redis(Cache)
- 开发应当优先考虑功能的稳定性,然后才是性能问题。
- 性能问题更多的是构架问题,应当优先优化构架。
- 以我们公司的规模还远没到需要增加缓存的情况。
- 缓存会增加系统复杂度,也可能带来一定的潜在风险。
- Java
前端技术构架
- UI
- AdminLTE(Bootstrap)
- 信息部人少,缺少专业的UI及前端人员,尽可能的利用现有可用的资源。
- AdminLTE是一套基础Bootstrap的界面框架,提供了大量基础的界面功能。
- Bootstrap是当前非常流行的前端框架,有着丰富的资源。
- AdminLTE(Bootstrap)
- JS
- 使用Bower管理静态资源。
- 静态资源的包管理工具
- 方便静态资源的升级管理
- 避免将静态资源直接复制到代码库,为代码库增加存储以及响应压力
- JQuery
- JS事实上的标准库,可极大的加速JS开发。
- formset.js、datepicker等
- 实现formset,日期选择等节目效果。
- 使用Django-Compressor进行静态资源的压缩优化。
- 使用Bower管理静态资源。
- Why Not
- Webpack
- 近几年前端发展速度非常快,前端开始变的复杂。JS不仅仅是为Web页面锦上添花。为配合使用JS进行大规模项目的开发,需要相关工具进行配合。
- 前端打包工具,可对JS库进行依赖管理,控制JS包的按需加载。可对JS/CSS编译(ES6/TypeScript/SCSS/LESS),压缩,图片优化等
- OA前端应用相对比较简单,Django-Compressor可以满足要求现阶段需求。相比Webpack能带来的好处,没必要为项目增加不必要的复杂度。
- React
- 用来构建用户界面的 JavaScript 库
- 更适合单页面的应用,如为手机提供类似APP的体验。
- 不采用原因同Webpack一样。
- Webpack