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种方案 ...
随机推荐
- JSON-C结构简介、使用
官方站点介绍http://www.json.org JSON (JavaScript Object Notation) is a lightweight data-interchange format ...
- iOS:删除小程序
//Applet的批次从父视图中移除 NSArray *subViews = [_scrollView subviews]; if([subViews count] != 0) { [subViews ...
- Jquery 插件初学习
参考文章:插件开发精品教程,让你的jQuery提升一个台阶 刚刚学了一下jquery的插件插件开发,写个demo记录.练习一下.毕竟,输出才是最好的学习. 这个也不过是最基础的一个插件写法,只是,自己 ...
- MVC客户管理(添加、修改、查询、分页)
ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页) 目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2 ...
- C#操作Xml:XPath语法 在C#中使用XPath示例
XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- oracle_PLSQL 快捷键使用技巧
PLSQL 快捷键使用技巧 2012-01-17 09:32:50标签:PLSQL PLSQL 编程工具快捷设置 PLSQL使用技巧 PLSQL 快捷键 oracle PLSQL 最近在开发过程中,遇 ...
- Android中适用于ListView、GridView等组件的通用Adapter
今天随便逛逛CSDN,看到主页上推荐了一篇文章Android 高速开发系列 打造万能的ListView GridView 适配器,刚好这两天写项目自己也封装了相似的CommonAdapter,曾经也在 ...
- P31RestKit.dll 2.0 Unity3d json
using System.Collections.Generic; using UnityEngine; using System.Collections; using Prime31; public ...
- spring data jpa使用懒操作
如果model对象的某属性使用lazy load,调用这个属性时会报错, failed to lazily initialize a collection of role could not init ...
- BZOJ 1355 Baltic2009 Radio Transmission KMP算法
标题效果:给定一个字符串,求最小周期节(不能整除) 示例Hint这是错误的忽略了就好了 环路部分应该是cab 这个称号充分利用KMP在next自然阵列,那是,n-next[n]它表示一个循环节 POJ ...