关于封装的一个小问题和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(){  ... });

那就要思考这个问题了

 

------

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

 

转载于:https://www.cnblogs.com/wangdy/p/5239505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值