- 1、本文档共99页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
31天重构学习笔记最好的沉淀
1. 封装集合
2010-06-28 03:46 by 圣殿骑士, 3050 visits, 网摘, 收藏, 编辑
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅 Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽的城市,没有亲戚或者朋友,所以才能静下心来两天时间写完这个重构参考规范。同时也感受了Windows Live writer写文章的快感。当然重构的整体架构得另当别论(整体架构在我的这篇文章有专门的讲解( /zenghongliang/archive/2010/06/23/1763438.html)。大的架构设计好了以后,这些重构细节点就成了东风之后的大火,对整个项目也是至关重要。31天重构这个系列和《代码大全》、《重构:改善既有代码的设计》比较起来最大的特点就是比较简单、浅显易懂。那么我这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。
具体也可以通过 /blogs/sean_chambers/archive/2009/07/31/31-days-of-refactoring.aspx查看原文。
?
概念:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。
?
正文:在很多时候,我们都不希望把一些不必要的操作暴露给调用端,只需要给它所需要的操作或数据就行,那么做法就是封装。这个重构在微软的代码库也经常遇到。比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道IList具有对集合的所有操作,所以这会带来很多隐患,最好的做法就是对它进行重构。
using System.Collections.Generic;namespace LosTechies.DaysOfRefactoring.EncapsulateCollection.Before{ public class Order { private ListOrderLine _orderLines; private double _orderTotal; public IListOrderLine OrderLines { get { return _orderLines; } } public void AddOrderLine(OrderLine orderLine) { _orderTotal += orderLine.Total; _orderLines.Add(orderLine); } public void RemoveOrderLine(OrderLine orderLine) { orderLine = _orderLines.Find(o = o == orderLine); if (orderLine == null) return; _orderTotal -= orderLine.Total; _orderLines.Remove(orderLine); } } public class OrderLine { public double Total { get; private set; } }}
那么重构之后,我们把IList换成了IEnumerable,大家都知道只包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合做出改变,这正是我们所需要的结果,具体代码如下:
using System.Collect
您可能关注的文档
- 新固废法解读培训.pptx
- 美国芝加哥无线T恤的商业模式(threadle.docx
- 美国驾驶证申请与新驾驶员培训简介.doc
- 阶梯教室座位表.xls
- 护理社会实践报告.doc
- 微机原理设计实验之两个数相乘.doc
- 小区月度水电燃气费统计表.xlsx
- 销售工作市场助理个人简历 (1).docx
- 水电费统计表(自动计算).xlsx
- 水电费统计表(输入数据自动计算).xlsx
- 专题04 语法填空【限时集训】冲刺2023年高考英语大题突破+限时集训(江苏专用原卷版).docx
- 甘肃省武威市天祝藏族自治县第一中学2022-2023学年高二上学期期末考试英语(原卷版).docx
- 2023届福建省泉州市高三质量检测(二)生物(原卷版).docx
- 广东省汕尾市2022-2023学年高一上学期期末语文(原卷版).docx
- 专题01 阅读理解冲刺2023年高考英语大题突破+限时集训(江苏专用原卷版).docx
- 吉林省“BEST合作体”2022-2023学年高一上学期期末考试英语Word版.docx
- 福建省泉州市2022-2023学年度高中毕业班第二次教学质量监测日语Word版.docx
- 广东省汕尾市2022-2023学年度高一上学期期末生物Word版.docx
- 广东省江门市新会第一中学2022-2023学年高一上学期期中英语试题(解析版).docx
- 河北省廊坊华一传媒学校2022-2023学年高一上学期1月期末英语Word版.docx
文档评论(0)