标签:
写个小例子吧 -- 很多细节(如校验、判断等等)都略了
其实不是有意写成这样,而是很多朋友都这么写(当然里面也有点夸张的写法)
这么写其实也没什么不好,简单明了,不用动脑子,一看就很直白,
但是如果面向的业务是需要变更的,那会很惨,再是个大型项目,那就更惨了(当然这个例子没啥业务可谈,就是个简单的用户类)
改一下:
这个例子中,简单一看,也没啥不一样的地方,看不出啥果来,最直观的可能就是在调用的时候,简单明了,其实不然:
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(){ ... });
那就要思考这个问题了
------
闲来无事,随便写写,望指正!
标签:
原文地址:http://www.cnblogs.com/wangdy/p/5239505.html