SaaS模式和实现思路
EFW框架开发的系统支持SaaS模式和实现思路
EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0
EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G
前言:以前做一个区域性医院信息系统项目,包括几十家小医院都需要上医院信息系统,以前系统都是单机构版的,就是必须要每个医院去安装,程序和数据库都是每个医院一套,这样的系统来做这个项目肯定不行,维护实施成本太高了,所以这么多医院必须统一一套程序和数据库。而且为了客户机免安装,最好做成Web版系统,只用浏览器输入地址就可以使用系统;通过对单机构版的系统进行了一次大的改版,由原来的CS架构改为BS架构,由原来数据库只支持一个医院改成支持多个医院,而且控制器机构与机构之间业务数据不同相互访问;改版后的系统后就有点类似于SaaS模式;现在EFW框架针对SaaS模式的一些特点,做了一些功能扩展,让我们开发系统的起点就是支持多机构的;但是在业务开发的时候又无需考虑多机构,只需单机构的思想编写代码,机构的区分框架帮我们处理;
本文要点
1.SaaS介绍
2.EFW框架中支持Saas的两个技术实现
3.如何开发SaaS模式程序?
4.WorkId的值的传递原理
5.总结
1.SaaS介绍
SaaS是Software-as-a-service(软件即服务)。
SaaS是一种通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要;
所以我们开发一个系统要让它支持SaaS模式,首先它必须是Web程序,这样客户不用另外安装程序,只需要浏览器就可以直接使用;其次系统要支持“按需收费”,不同级别的客户可能使用的系统模块有区别,那么我们的系统必须支持按权限配置系统模块;还有就是我们的系统肯定只有运行一套在中心服务器,数据库也只有一套,却要满足不同的客户使用系统,而且客户之间的数据又要完全独立,这样需要我们在系统中有隔离机制可以按照机构区分业务数据;
2.EFW框架中支持Saas的两个技术实现
1)根据注册机构的级别,提供不同功能模块,实现按需收费
不同机构的按需收费,可以利用框架中的权限管理来实现。前面有一章有讲EFW框架权限管理,权限控制简单来说就是,角色配置模块菜单,用户绑定角色,用户登录后根据上述配置动态生成系统菜单而达到权限的控制;不同的机构可以维护不同的角色;如果菜单级别的权限还不能满足,还可以使用页面子权限进行页面中控件操作、数据显示都可以控制;
2)一个数据库隔离不同机构的业务数据
不同机构的业务数据隔离,首先框架基础数据字典中有一张机构表,管理所有机构数据,另外所有业务表都架构机构编码WorkId字段,产生的业务数据的时候把WorkId写入,这样用户查询数据的时候根据用户绑定的WorkId过滤业务表的数据;
另外如果系统不需要支持多机构,就只有一个机构,那每个业务表加一个WorkId字段比较别扭,框架提供了SaaS开关,为false的时候就不需要WorkId字段;

3.如何开发SaaS模式程序?
1)添加一个新机构
新增机构后,默认创建一个机构的超级用户,机构“企业级系统”和“测试系统”的超级用户分别为“admin”,“admin2”,两个用户分别登录,打开“书籍管理”功能,如此两个用户显示书籍列表数据不同。

2)Books表结构及界面数据显示



3)代码实现
实体Book的配置,与SaaS有关的配置是IsGB,如果IsGB=true实体不区分机构,IsGB=false实体区分机构,这里Book是业务实体所以要区分机构,而一般只有字典数据配置为true;

实体使用ORM保存数据时候并不需要指定WorkId的值,而且Book实体也没有WorkId属性;而插入数据库中WorkId值是框架中ORM自动处理的,这样编写程序的时候不需要关注WorkId,简化编码代码;

实体解决不了的复杂数据库操作,就使用Dao,Dao里面都是直接使用SQL语句操作数据库,所以当多机构的时候,Where条件后必须加上WorkId条件;

4.WorkId的值的传递实现
上面实例中的代码,在使用frmBook.currBook.save(); 和 strsql = string.Format(strsql, searchChar, flag,WorkId); 中的WorkId值是怎么来的?
1)用户登录后,根据用户名就能得到用户的机构编码WorkId,并缓存在“RoleUser”,一个用户只能属于一个机构;
2)打开界面的时候初始化控制器,同时实例化oleDb对象,oleDb对象有WorkId属性,值从缓存“RoleUser”取登录的WorkId绑定给oleDb对象,控制器中的所有代码以及后台代码实现都是使用的此oleDb对象操作数据库,所以必须将oleDb对象在Controller、ObjectModel、Entity、Dao中传递,同样多机构需要的WorkId值跟着oleDb对象就在各个对象中传递;
3)控制器对象将oleDb传递给ObjectModel对象,实例化对象必须使用NewObject()方法,通过此方法实现oleDb对象传递。所以如果使用new来实例化ObjectModel对象是不能操作数据库的;
4)oleDb传递给Dao对象,实例化对象必须使用NewDao()方法;
5)Dao中的WorkId

5.总结
使用框架开发SaaS模式的程序,只需要注意这几点:
1)配置文件中的IsSaas=true
2)业务实体的类名自定义属性IsGB=false
3)数据库中业务表必须增加WorkId字段
4)后台代码可以直接随时获取WorkId的值
SaaS模式和实现思路的更多相关文章
- 二十九、EFW框架开发的系统支持SaaS模式和实现思路
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- SaaS模式给用户带来的优势
这两年SaaS服务在中国越来越受欢迎,企业正在从使用本地化软件向SaaS服务转变.由于企业用户人力成本的上升.移动终端设备的兴起以及共享经济对企业的影响,企业采用经营设备.软件的方式也在逐渐发生着变化 ...
- OneAlert:国内首家 SaaS 模式的云告警平台
随着互联网行业的高速发展,企业 IT 应用环境日趋复杂.几分钟的故障就会严重到用户体验,那么如何有效降低IT故障带来的影响呢?权威数据表明,86%的企业认为建立有效的监控系统和告警系统.提升 IT 的 ...
- 中国首个 SaaS 模式的云告警平台安卓版 APP 上线
今年一月底,国内首个 SaaS 模式的云告警平台 OneAlert 正式发布了 iOS 版 App 客户端,今天上午,安卓版 App 客户端也正式上线了!每个安卓用户,无需电脑,都可以通过手机全程跟踪 ...
- 中国首个 SaaS 模式的云告警平台 iOS 版 APP 上线
今天上午,国内首个 SaaS 模式的云告警平台 OneAlert 正式发布 ios 版 APP,每个 ios 用户,无需电脑,都可以通过手机全程跟踪所有告警,并且可以和每一个成员一键式电话沟通,团队协 ...
- 企业SaaS模式的优缺点
好处: 1.降低成本 项目成本.人员成本 2.使用简单 无需系统维护,用户只需登录就可以享受系统的功能 3.安全性 SaaS模式下,企业用户最关注的是自己的数据能不能得到安全保护. A.涉及的数据有哪 ...
- SaaS模式介绍
SaaS是Software-as-a-service(软件即服务). SaaS是一种通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且 ...
- 什么是SAAS模式网站?
说到“SAAS”,它的读法非常有趣,有“萨斯”,有“S.A.A.S”, 还有中文白话“啥事”的.不过,大多不熟悉的朋友第一反应可能是非典?,别误会,此“SAAS”非彼“SARS”,一字之差,但是意义完 ...
- SaaS模式实现架构
SaaS模式实现架构 https://blog.csdn.net/xwq911/article/details/50630266 1. 数据库层: 数据库这一层的设计模式是很清晰的,无外乎只有3种方案 ...
随机推荐
- java并行体系结构
并行编程 线程通信 共享内存和消息传递 线程同步 控制不同线程的运行顺序 java并发 基于共享内存模型 指令重排序 编译器重排序 处理器重排序 cpu重排序 写缓存区(cache.寄存器) 内存屏障 ...
- Sizzle.selectors.relative [ 源代码分析 ]
1 jQuery 对象Sizzle.selectors.relative中存放了块间关系符和相应的块间关系过滤函数,称为"块间关系过滤函数集" 块间关系符共同拥有4种,其含义和过滤 ...
- 一键安装 gitlab7 on rhel6.4 并设置邮件发送
一键安装 gitlab7 on rhel6.4 并设置邮件发送 世间本无事,庸人自扰之.书归正传,简短节说:gitlab是个好东西,可是安装手冊奇烂.尽管以前对比文档一步一步安装起来gitlab 6. ...
- MTK6572横屏的调试过程
电视剧集:系统MTK缺省的系统源代码,Phone模式.底部有三个虚拟按键.需求为,设置成默认横屏,设定一个合理的虚拟按键方案. ------------------------------------ ...
- poj1083 思考题
http://poj.org/problem?id=1083 Description The famous ACM (Advanced Computer Maker) Company has rent ...
- TinyMCE实现简单的本地上传
TinyMCE这个东西很多地方再用,不过我以前一直没用过,最近才接触,因为有一套现成的metro风格的皮肤,仅此而已,不过最终如何调用还是我得来实现.其他的都好说,网上的资料一大把一大把的,唯独这个本 ...
- SQL Server的还原
原文:SQL Server的还原 1.差异备份的还原 不备份结尾日志的情况下还原数据 创建差异备份的放在我们已经在前面一篇博客SQL Server的备份中提到了,这里我们不再赘述,下面我们给出差异备份 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(三)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...
- WebService到底是什么? [转]
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- Git批量删除
Git批量删除 git的改动都需要stage过程后才能commit.当git中有大量改动时就需要能够批量操作在方便.改动分三种: modify: 有文件修改 add: 有文件增加 rm: 有文件删除 ...