关于封装的一个小问题和TA的例子

写个小例子吧 --  很多细节(如校验、判断等等)都略了

其实不是有意写成这样,而是很多朋友都这么写(当然里面也有点夸张的写法)

这么写其实也没什么不好,简单明了,不用动脑子,一看就很直白,

但是如果面向的业务是需要变更的,那会很惨,再是个大型项目,那就更惨了(当然这个例子没啥业务可谈,就是个简单的用户类)

改一下:

这个例子中,简单一看,也没啥不一样的地方,看不出啥果来,最直观的可能就是在调用的时候,简单明了,其实不然:

1. 既然是OOA/D,那么就尽量把类型相关的类型封装在类型里面,尽量减少外部逻辑对类型的影响;

2. 减少类耦合度

3. 代码可读性高,便于日后维护

现在我们给Address添加一个属性楼号 (BuildingNo):

  第一种方式有点麻烦,需要修改UserInfo类和Program类,一个需要新定义属性,一个需要解析地址并给新属性赋值;

  第二种方式稍微简单点,修改Address类即可

另外,这里故意采用了Struct,是想顺便说明一下类型对内存的影响(当然,这里采用struct是错误的):

比如1w的用户中,5000人住在一个小区,那么他们的地址应该是一个就足够了,不用在内存中声明1w个Address对象;

如果采用值类型,那么赋值的时候就等于copy了一份;

如果采用引用类型,那么赋值的时候,只是浅复制了一份,传递了一个指针而已;

现在考虑:

小区之前属于A区,现在行政划分到B区,那么这5000人的Address都是需要修改的,没有谁乐意遍历一遍吧

(这里只是假如在UserInfo中关联了Address的情况,实际项目中,估计没这么设计的)

只是为了说明采用值类型和引用类型的区别,如果犯过以下错误:

OneThreadRun(new Obj(){  ... });

那就要思考这个问题了

------

闲来无事,随便写写,望指正!

时间: 2024-08-04 18:20:09

关于封装的一个小问题和TA的例子的相关文章

先定一个小目标,自己封装个ajax

你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 你是否发现fetch好像比ajax好用那么一点 你是否想过自己封装个ajax.... 纯前端写得久了,便想折腾点事情.比如先定一个小目标,年前自己写个类jquery轻量级库.... 那么就从自己封装一个ajax切入吧,首先我整理的一个思维导图,一目了然 解析参数数据 通常我们的请求后面会有一些参数,

自己封装的一个Ajax小框架

在经历了Jsp实训的惨痛教训后,特意花了点时间学习Ajax,学完后自我感觉良好,于是写了如下一个小框架: 1 /** 2 * frameAjax 3 * 4 * 参数: 5 * paramsObj: Json 6 * required params: 7 * type:请求参数类型(String) 8 * url:请求地址(String) 9 * data:请求参数(Json),data可为空值. 10 * success:请求回调(Function) 11 * async:表示请求是否异步处理

电商总结(八)如何打造一个小而精的电商网站架构

前面写过一些电商网站相关的文章,这几天有时间,就把之前写得网站架构相关的文章,总结整理一下.把以前的一些内容就连贯起来,这样也能系统的知道,一个最小的电商平台是怎么一步步搭建起来的.对以前的文章感兴趣的朋友可以看这个,http://www.cnblogs.com/zhangweizhong/category/879056.html 本文大纲: 1. 小型电商网站的架构 2. 日志与监控系统的解决方案 3. 构建数据库的主从架构 4. 基于共享存储的图片服务器架构 5. 移动M站建设 6. 系统容

一个小程序能够反映的能力

程序员小郑刚步入岗位,但是在公司编码过程中没有受到专业的编码规范的培训,编写出来的程序虽然能够完成指定的功能但是比较不统一,偶尔会别出心裁的设计出自己的简化方法.老王这是从事了软件编码十多年了,现在都快到不惑的年龄了,在软件行业摸爬滚打十多年从事过多个行业,接触过不同公司的编码的规范,在软件代码编写中有独到的认识. 有一天有一个小功能的改动,由于这是一个非常重要的基础系统的功能变动,所以即便是一个小的功能变动公司上上下下都投入了非常高的重视程度.这天老王找到小郑告诉了需要修改这个系统并详细的描述

如何打造一个小而精的电商网站架构?

本文大纲: 1. 小型电商网站的架构 2. 日志与监控系统的解决方案 3. 构建数据库的主从架构 4. 基于共享存储的图片服务器架构 5. 移动M站建设 6. 系统容量预估 7. 缓存系统 一.小型电商网站的架构 刚从传统软件行业进入到电商企业时,觉得电商网站没有什么技术含量,也没有什么门槛,都是一些现有的东西堆积木似的堆出来罢了.然而,真正进入到这个行业之后,才发现并非如此.有人说过,好的架构,是演化出来的,电商网站的架构也是如此.现在好的电商网站,看似很复杂,很牛逼,其实也是从很小的架构,也

自己封装的一个LoadRes组件

这两周一直太忙,没有好好处理上上上周遇到的一个让我加班到凌晨的问题,这个问题是判断flash的加载. 之前的思路是让flash的人在制作flash的时候,加入了一个回调方法,该方法再会回调我页面的方法. 想象虽然很丰满,但是现实确很骨感,由于页面资源的加载顺序问题,如果flash是通过缓存读取得到的,那么flash便会先于我的脚本加载,这时便会出现flash调不到我定义的方法.但是由于功能的原因以及考虑页面的整洁性,我又不能将脚本放入到head中,最终的解决思路就是在head中加入一个scrip

自己封装的一个纯div+css样式弹出泡泡消息框

也许很多框架都自带了这样的弹出泡泡框,但我没接触过,现在需要用,于是便自己封装了一个,虽然还不完美,但已经可以用了.这个小控件可以重定义样式,通过传递配置参数,或修改默认配置参数都可以进行样式调整.不管怎么说,就当是练手,或给新人提供一个参考学习的机会也行吧 /* * js 对象合并 */ function extend(newObj, defaultObj) { var result = {}; for (var p in defaultObj) { result[p] = defaultOb

从最小角回归(LARS)中学到的一个小知识(很短)

[转载请注明出处]http://www.cnblogs.com/mashiqi 假设这里有一组向量$\left\{ x_i \right\}_{i=1}^n$和一个待投影的向量$u$.假设$u$和每个$x_i$的内积都为正数,也就是说$u$和每个$x_i$的夹角都小于90度.那么当我们把$u$投影到$\left\{ x_i \right\}_{i=1}^n$上时,理所应当地每个$x_i$的系数$\beta_i$也都应该大于零:$$u = x_1\beta_1+\cdots+x_n\beta_n,

2018给自己个plan,给自己一个小目标

元旦假期的开始,标志着2017已悄然远去:元旦的假期的结束,标志着2018的开始.现在全国各地在飘雪,上海这个南方的城市在下雨.雨挺好的,虽没有大雪那样包容万物通篇全收,却少了少许的寒冷. 元月开始给2018年的我自己来一个小目标. 1.在2018年6月1号前结束前端学习,并写一个前端的项目,封装自己的js框架. 2.7月15号前处理好工作事情 3.每天锻炼一下,体重减到130以下 4.去一趟杭州考察一下合作项目的事情 5.在下半年改变一下自己身边的现状. 6. 给自己做一下 投资理财 7. 出