键值对在架构设计里的应用范本参考_第1页
键值对在架构设计里的应用范本参考_第2页
键值对在架构设计里的应用范本参考_第3页
键值对在架构设计里的应用范本参考_第4页
键值对在架构设计里的应用范本参考_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

键值对在架构设计里的应用1一、谈谈我对程序的理解作为程序员你对程序是如何理解的?写这篇文章的时候,我认真思考了下,发现我对程序的理解不是和教科书一样的,我每次听到程序二字我想到的只有两个东西:代码和数据,而每次写程序的时候也就是写代码操作数据的过程。做程序开发和做菜很像,数据就是食材,代码就是厨艺,做出的软件就是一道菜了,至于这个菜好不好吃,到底是看食材还是看厨艺了?呵呵,当我抛出这个问题的时候,我的第一反应是菜不好吃当然是手艺不好了,不知道其他童鞋是不是这么想的。认真想下,一道好菜一般都是二者必须兼备,当然不排除某一项突出也可以达到同样的效果,但这种情况毕竟不是大众化,而是属于少数精英的,做软件也是如此,代码与数据是不可偏废的。这里我要提的是数据。根据我的经验和知识 (分类标准我一直想不太好, 所以说是自己的经验和知识) ,我把数据分为两类:落地数据和不落地数据。1.落地数据:就是被持久化的数据,这种数据一般放在硬盘或是其他的持久化存储设备里,例如:图片、系统日志、在页面上显示的数据以及保存在关系数据库里的数据等等, 落地数据一定会有一个固定的载体,他们不会瞬时消失的。2.不落地数据:一般指存储在内存或者是网络传输里的数据, 这些数据是瞬时,使用完毕就会消失, 例如:我们在浏览器发送给服务器的请求;从数据库读取出来的一直到页面展示前的数据等等。写过程序的人都知道,程序里对这两种类型数据操作是有很大的不同的。二、由JavaEE的MVC 设计模式谈起2Java一个很重要的贡献就是推出了 MVC设计模式,MVC其实应该按 VCM顺序读最好。 V及View,主要是前台展示的页面; C及Controller ,控制层主要作用是接受前台页面数据,根据数据的不同调用后台不同的业务模型,同时业务模型处理好的数据也要发送到 Controller ,Controller 再分配给相应的前台页面;M及Model,模型层专门负责操作业务模型。下图很好的表达了 MVC的理念:随着MVC模式的发展,现在流行的架构: View(视图层)+Controller (也叫action,控制层)+Service(业务模型层) +DAO(数据访问对象层 )+数据库的多层结构,如下图:34红线是用户的请求;蓝线是服务器响应用户的请求。红色和蓝线也代表各层数据传输的流向。不管是传统的 MVC模式还是现在流行的多层架构, 各个逻辑层传输的数据都是不落地数据。在Java项目里,一般我们都是传输 JavaBean,而这些JavaBean 都是程序员根据实际业务需求自己定义的,例如下面一个典型的 JavaBean:5各个逻辑层传输 JavaBean对象的观念一定会深入很多 Java程序员的人心,当一个项目开始,程序员都会吭哧吭哧的创建 JavaBean对象,比如数据库表映射的 JavaBean,在struts1.2 里还有页面表达对应的JavaBean,做了这么多年这样的 JavaBean,现在我就思考,使用 JavaBean 真是最好的选择吗?三、Nojavabean6我这里借用现在很流行的 NoSQL 的定义作为我文章第三部分的标题。 JavaBean已经深入很多 Java程序员心理,甚至是很多程序员的习惯,其实它真的那么好用吗 ?真的那么包治百病吗?其实不尽然,下面我要列举它的缺点:1.Javabean 的文件太多。一个 Java企业项目,都会使用 ORM,将数据库映射为 Java对象,一般一张表对应一个 JavaBean,甚至有些特殊情况还会归并一些表做一个统一的 JavaBean,如果这个系统有 1000张表也就会有不少于 1000个JavaBean,在原始的 struts1.2 里面还有和页面表单字段一一对应的JavaBean,大伙可以想象下,这些毫无技术含量的 Java类也许会像病毒一样去繁殖。2.JavaBean 会增强各层之间的耦合度。每个层里运算结束,业务数据大多会被封装成 JavaBean 对象,不同的业务封装的 JavaBean是不同的,MVC本来就是为逻辑层解耦做的设计,而传输介质却是包含业务逻辑,如果碰到业务层级的修改,各个层之间都会有相应的结构性修改,增加了维护的成本。3.我们至少会多维护一份数据字典。数据库里的某张表一个字段叫 USER_NAME,那么到了 JavaBean里可能就变成了 userName ,当然我们在 ORM会有一个映射模型,但是随着数据一层层传递,离数据库越远的数据,数据的本质也就越模糊,特别会给新手产生一定误解,增加了软件开发和维护成本。74.这个是缺点是我的在实际项目里碰到的一个难题, 我还没把它总结成一个概括性的缺陷, 但我相信会有童鞋碰到类似的问题。我在一个项目里做权限管理,因为某些数据的敏感性我们要做数据集的权限,比如某些人只能查看当天的数据,还有些人只能看当天数据前 10条,另一些人只能看最近一个星期的数据,而且只有三个字段能让他查看。由于权限管理是在该项目三期的任务,我们的权限设计是在原有的系统上进行开发,而且包含两个不同项目,其中一个项目是使用 JavaBean做传输介质,另一个我们用了另外的方式,最后这个 JavaBean成了我们的梦魇,为了做一个通用解决方案,我们将用 JavaBean作为传输介质的项目重构了一下,增加了不少工作量。5.MVC 分层思想,其实是为了让专业的人做专业的事,擅长做页面的做页面,擅长逻辑的做逻辑,按MVC思想项目开发往往是横向分组的,但是实际开发中,没人敢这么分配工作,究其原因就是层与层直接传输的介质并不统一。既然我的标题是 Nojavabean ,notonlyJavaBean ,那么就像 NoSQL能弥足SQL数据库的不足,以上的不足我们用什么技术来弥补了?答案就是:键值对。四、万能的 MAP(键值对)8Google 的三篇论文带来了云时代, 用博大的胸怀改变了世界, 而这里面最关键的东西就是 Map(键值对),Key-value 模式(后面简称 KV)+数组我个人觉得基本可以表述这个世界的 90%了。而且基本所有的语言都支持KV的数据结构,这件 KV是多么强大的数据结构,世界就是被这个简单方式而改变的。(本来我想谈谈KV在云计算存储和计算的作用,作为本文主题的补充,但是时间限制,大伙可以自己查阅下相关资料)。我的替代数据模型就是用Map作为数据传输介质,让我产生这个想法的源头是三个技术:MapReduce,iBATIS和Json;我们中心很重视Hadoop技术,我们这里经常做Hadoop相关技术分享,听来听去都有什么MapReduce,都是Map,Map;而我们现在公司的项目都是用iBATIS做ORM,当时表很多,我一时偷懒不是所有的iBATIS配置文件都和JavaBean一一对应,只是返回一个Map对象,如果是列表查询就是List<Map>,没想这么做居然有意外的收获,因为页面数据我们都是封装成Json对象,Json其实也是一个键值对的模型,数据到了action也是被传化成了Map,所有返回值一样,居然提升了整个开发的效率,而且项目里面少了JavaBean对象,显的清爽多了。下面我总结下 Map 的好处,在文章第三部分写道了 JavaBean的缺点,这些缺点倒过来看就是 Map 的优点了,我这里就不再复述了:1.不管什么技术从 Map取值的方式是统一的:例如在 JavaScript 里面Json:9obj.XXX 或者obj[XXX]Java里的Map:map.get(XXX) 或map.put(XXX)Map 取值方式是用 Key,Key是字符串,是可以随时定义,而 JavaBean 是通过定义的方法读取,如果使用Map 会将传输数据的业务属性封闭在 Map 内部,这样带来了操作的方便。Map技术几乎在所有的主流技术里面都有,那么用这种数据结构作为传输介质是跨平台的。Map数据结构算法很成熟,做复杂计算是十分方便。卫生管理制度1 总则1.1 为了加强公司的环境卫生管理,创造一个整洁、文明、温馨的购物、办公环境,根据《公共场所卫生管理条例》的要求,特制定本制度。1.2 集团公司的卫生管理部门设在企管部,并负责将集团公司的卫生区域详细划分到各部室,各分公司所辖区域卫生由分公司客服部负责划分,确保无遗漏。2 卫生标准2.1 室内卫生标准2.1.1 地面、墙面:无灰尘、无纸屑、无痰迹、无泡泡糖等粘合物、无积水,墙角无灰吊、无蜘蛛网。2.1.2 门、窗、玻璃、镜子、柱子、电梯、楼梯、灯具等,做到明亮、无灰尘、无污迹、无粘合物,特别是玻璃,要求两面明亮。2.1.3 柜台、货架:清洁干净,货架、柜台底层及周围无乱堆乱放现象、无灰尘、无粘合物,货架顶部、背部和底部干净,不存放杂物和私人物品。2.1.4 购物车(筐)、直接接触食品的售货工具(包括刀、叉等):做到内外洁净,无污垢和粘合物等。购物车(筐)要求每天营业前简单清理,周五全面清理消毒;售货工具要求每天消毒,并做好记录。2.1.5 商品及包装:商品及外包装清洁无灰尘(外包装破损的或破旧的不得陈列)。2.1.6 收款台、服务台、办公橱、存包柜:保持清洁、无灰尘,台面和侧面无灰尘、无灰吊和蜘蛛网。桌面上不得乱贴、乱画、乱堆放物品,用具摆放有序且干净,除当班的购物小票收款联外,其它单据不得存放在桌面上。2.1.7 垃圾桶:桶内外干净,要求营业时间随时清理,不得溢出,每天下班前彻底清理,不得留有垃圾过夜。2.1.8 窗帘:定期进行清理,要求干净、无污渍。2.1.9 吊饰:屋顶的吊饰要求无灰尘、无蜘蛛网,短期内不适用的吊饰及时清理彻底。2.1.10 内、外仓库:半年彻底清理一次,无垃圾、无积尘、无蜘蛛网等。2.1.11 室内其他附属物及工作用具均以整洁为准,要求无灰尘、无粘合物等污垢。2.2 室外卫生标准2.2.1 门前卫生:地面每天班前清理,平时每一小时清理一次,每周四营业结束后有条件的用水冲洗地面(冬季可根据情况适当清理),墙面干净且无乱贴乱画。2.2.2 院落卫生:院内地面卫生全天保洁,果皮箱、消防器械、护栏及配电箱等设施每周清理干净。垃圾池周边卫生清理彻底,不得有垃圾溢出。2.2.3 绿化区卫生:做到无杂物、无纸屑、无塑料袋等垃圾。3 清理程序3.1 室内和门前院落等区域卫生:每天营业前提前10分钟把所管辖区域内卫生清理完毕,营业期间随时保洁。下班后5-10分钟清理桌面及卫生区域。3.2 绿化区卫生:每周彻底清理一遍,随时保持清洁无垃圾。4 管理考核

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论