CVS开发框架

简介:

1. 什么是CVS框架

CVS(Controller, View, Service) 是控制器、视图、服务框架。

View 视图层不用多说

Controller 控制器层,负责用户业务逻辑

Service 服务层,服务端业务逻辑与数据存取操作

我提出的CVS其实是MVC去掉Mode其他保持不变, 将Mode替换为Service, 同时将以部门Controller逻辑放入 Service 实现业务逻辑共享。

2. 为什么采用CVS模式开应用程序

目前软件开发领域主流MVC模式,或者其他MTV,CURD等等,往往都是MVC不分离,即业务逻辑与数据库操作不分家。这给带来了很多数据安全问题。

通常DBA会提供一个数据库访问用户,该用户可以做“增”、“删”、“查”、“改”操作,权限的颗粒度控制比较粗糙,例如对行的权限,列的权限控制就比那麽容易做。

以上谈的是为什么采用CVS模式开发的原因之一。

第二个原因是大型系统不可能使用一台服务器,而是分布式模式,这就带来了很多应用跨物理机的访问,我们将很多业务逻辑以服务的方式提供集群节点调用。

这种模式同时我们的服段提供分布式部署,负载均衡与高可用需求。解决了性能问题、横向扩展问题等等。

3. 何时采用CVS模式开发

立项之初决定采用CVS模式开发当然最好,如果没有,可以中途新增功能采用CVS模式,然后逐步向CVS模式过度。

4. 何处采用CVS模式开发

5. 谁来做,以及分工问题

在我的团队中,由于安全问题,我将开发团队分为几个部门,分出一部人专门负责Service的开发,这样其他开发者无需关心数据库解决以及数据存储。只需要安装前面的团队提供的接口文档开发即可。

另外这种开发模式有个好处,它利于多个项目同时开发,我们只需提前定义好接口的名称、输入参数与输出参数,开发与调试每个团队可以自行模拟接口的返回数据,提前开发功能模块。

6. 怎样设计并实施CVS

下面是我设计的CVS框架,并在我的工作中得到广泛应用,从反馈角度看,目前无论是安全性,还是性能,伸缩性,都非常满意。

下面我们分别讲解每个部门的功能与作用。

6.1. 入口部分

框架最顶层是物理防火墙,常同时硬件设备,这里不多说。对于访问者直接面对的是web服务器与mq服务器。

我提供json, soap, xml-rpm 通过web服务器向访问者提供服务,另一个通道是MQ消息队列服务器,你可以扩展前端接口并提供其他形式的接口。例如fifo,基于tcp/ip的ipc, unix socket等等。

6.2. 应用防火墙,用户认证,访问控制列表

应用防火墙是软件层面防火墙,在我们没有能力购买昂贵的硬件设备的时候,我们可以使用该功能,用来阻止或放行IP地址。如果你有硬件防火墙,我仍然建议你使用,可以防止网络管理员配置上的疏忽。

用户认证不必多说,我们提供很多种用户认证渠道。

ACL 是控制Class 与 Method 的访问权限,我通常会创建很多用户,例如frontend针对前端,面向用户,backend针对后台,面向企业员工等等,下面我举一个例子:

'frontend' => array(
    'frontend/Exchange'=> array('getOne','',''),
    'frontend/Userinfo'=> array('getUserInfo','getMemberInfo',''),
    'frontend/Config'=> array('getWithdrawingConfig','getPlatFormConfig',''),
    'frontend/Keyloggers'=> array('insertSignupKeyloggers','deleteSignupKeyloggers'),
    'frontend/Allinpay'=> array('insertOrder','updateOrder','isFirstAccount'),
    'frontend/Members'=> array('getChineseNameMobile','changeMemberPassword','resetMemberPassword','getLoggingTime','insertMember','checkUserRealName'),
    'frontend/Balance_report'=>array('getdayreport','getmonthreport'),
	'frontend/Notice'=>array('send','registerVcode','passwordVcode'),
    'frontend/Pay'=>array('showPayList','pay'),
	'frontend/Accounts'=>array('isFirstAccount','isFirstAccountAngelFund'),
	'frontend/Exchange'=>array('getRate'),
    'frontend/Card'=>array('upload'),
),
'backend' => array(
    'backend/Keyloggers'         =>array('SelectSignupKeyloggers','updateSignupKeyloggers','SelectSignupKeyloggersAll'),
    'backend/Members'=> array('selectPasswordLog','downPasswordLog'),
    'backend/Balance_report'=>array('getdayreport','getmonthreport','getshow'),
),
'anonymous' => array(
    'News'=> array('getNews','getFirst','getTop10'),
    'RSS'=> array('','','')
)
'soap' => array(
          'Members'=> array('getAllByUsernameAndMobile','getAllByLimit',''),
          'Exchange'=> array('getOne','',''),
          'Soaplog'=> array('info','debug','warning','error'),
)
			

6.3. 消息摘要与证书

json 模式访问服务需要验证指纹摘要信息,一可以确认人份,二可以验证数据完整性

我们还提供非对称加密传输,通过公钥与私钥配对加密与解密。

综上所述我们在安全方面基本都考虑到了,比较全面,可以说武装到牙齿。

6.4. 日志

记录每一次访问,包括IP来源地址,用户名,访问类方法以及访问时间。

6.5. 数据库抽象层

这里也不必多说

7. 怎样部署CVS

我们分开部署SSL与WEB服务器,不要让SSL加密与解密过程影响到Service的工作,这种做法通常叫SSL卸载。可以将SSL放在F5等负载均衡设备之上,也可以使用廉价的服务器。

服务器的负载均衡这里也不多说。

目录
相关文章
|
存储 安全 前端开发
QT应用编程: QtCreator配置Git版本控制(码云)
QT应用编程: QtCreator配置Git版本控制(码云)
564 0
QT应用编程: QtCreator配置Git版本控制(码云)
|
6月前
|
IDE 开发工具 git
高效开发:掌握主流IDE与版本控制系统
高效开发:掌握主流IDE与版本控制系统
67 0
|
11月前
|
数据可视化 前端开发 开发工具
前端基本开发工具的版本控制工具之SVN
SVN(Subversion)是一款开源的版本控制工具,它可以帮助团队协作开发,并且提供了诸如版本回退、分支管理等功能。下面就让我们来看看SVN的特点和优势。
167 0
|
11月前
|
数据可视化 前端开发 开发工具
前端基本开发工具的版本控制工具之Git
Git是一种分布式版本控制系统,它可以帮助开发者进行代码版本管理和协作开发。下面就让我们来看看Git的特点和优势。
64 0
|
Ubuntu 程序员 Linux
SVN版本管理工具入门教程(一)
SVN版本管理工具入门教程(一)
484 0
SVN版本管理工具入门教程(一)
|
存储
SVN版本管理工具入门教程(二)
SVN版本管理工具入门教程(二)
246 0
|
Web App开发 JavaScript 前端开发
Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
  本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题!   一. 项目简介   本项目原是某单位的票务管理系统,用于某时装周来进行票务分配以及门票校验使用的。
1598 0
|
JavaScript 前端开发 Linux
GitNote 基于 Git 的跨平台笔记软件正式发布
自己编写的一个应用,GitNote 基于 Git 的跨平台笔记软件,内置Git 同步,支持 todo 管理,支持富文本,markdown 编辑,支持思维脑图,流程图,多图床等等功能.
2838 0
|
存储 网络安全 Android开发