关于封装的一个小问题和TA的例子
2016-03-03 17:42
232 查看
写个小例子吧 -- 很多细节(如校验、判断等等)[b]都略了[/b]
其实不是有意写成这样,而是很多朋友都这么写(当然里面也有点夸张的写法)
这么写其实也没什么不好,简单明了,不用动脑子,一看就很直白,
但是如果面向的业务是需要变更的,那会很惨,再是个大型项目,那就更惨了(当然这个例子没啥业务可谈,就是个简单的用户类)
改一下:
这个例子中,简单一看,也没啥不一样的地方,看不出啥果来,最直观的可能就是在调用的时候,简单明了,其实不然:
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(){ ... });
那就要思考这个问题了
------
闲来无事,随便写写,望指正!
其实不是有意写成这样,而是很多朋友都这么写(当然里面也有点夸张的写法)
这么写其实也没什么不好,简单明了,不用动脑子,一看就很直白,
但是如果面向的业务是需要变更的,那会很惨,再是个大型项目,那就更惨了(当然这个例子没啥业务可谈,就是个简单的用户类)
改一下:
这个例子中,简单一看,也没啥不一样的地方,看不出啥果来,最直观的可能就是在调用的时候,简单明了,其实不然:
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(){ ... });
那就要思考这个问题了
------
闲来无事,随便写写,望指正!
相关文章推荐
- C++不同进制整数
- 【知识积累】爬虫之网页乱码解决方法(gb2312 -> utf-8)
- Java 入门 之 线程状态说明
- Redis 高性能内存存储
- POJ 3613 Cow Relays 倍增Floyd
- 3ds Max Exporter------Mesh
- http 415 Unsupported Media Type
- UVA 12075Counting Triangles
- malloc()参数为0的情况
- java EE js css 加载及版本集中管理器
- winform 防止奔溃重启
- ASP.NET 4.0尚未在Web服务器上注册。您需要手动将Web服务器配置为使用ASP.NET,这样您的网站才能正确运行。
- 解决wubi安装ubuntu时要下载系统映像文件问题
- iOS关于UIWebView和Javascript相互调用及WebViewJavascriptBridge分析
- 模糊哈希算法的原理与应用
- ANDROID SDK 下载地址
- 《编写高质量iOS与OS X代码的52个有效方法》之第三章要点
- 使用EZAudio库 录音wav格式 并转成amr格式 碰到的问题
- 在本地使用Apache配置WEB服务器
- 常见的位运算用法总结