码农小手册1

把系统中复杂和经常变化的模块单独封装。

抽象的好处在于 你设计的时候 能忽略无关的细节。

封装帮助你管理 系统的复杂度的方法在于不让你看到那些复杂度。

在设计类的时候,要养成一个习惯。 问自己 “我该隐藏些什么字段和函数”

你会惊奇的发现,有很多棘手的设计难题都会在你面前化解。

好的程序设计所面临的最重要挑战之一就是适应变化。目标应该是把不稳定的区域隔离出来。从而把所带来的影响限制在一个子程序、类或者包的内部。

方法是:

1、找出看起来容易变化的模块。

2、把容易变化的模块分离出来。把容易变化的组件单独划分成类。

设计好类的接口,把变化限制在类的内部,且不会影响类的外部。任何使用了这个将会发生变化的类的其他类都不会察觉到变化的存在。

下面列举出容易发生变化的区域:

1、业务规则  比如说业务逻辑处理,这样 即使更换了 界面框架,业务逻辑就不用动。

2、对硬件的依赖性  这种隔离会非常有利于你把程序移植到新的硬件环境。同样,也方便你对系统模块进行测试。比如说 当硬件功能模块尚不稳定的时候,你可以 用软件作为模拟器 模拟硬件的输入输出 来替代硬件,继续开发。等硬件可用的时候再与软件连接。

3、输入输出 如数据的存储方式 之前用文本存储后来改为数据存储。

4、非标准的语言特性 比如你系统中使用了第三方框架 那么,以后可能会舍弃使用这套框架,那么 你应该用一个单独的类 或子模块 封装对 这些第三方框架的调用。

5、困难的设计  把觉得设计的很差而需要重新做的模块 隔离出来 以减少它对系统其余部分的可能影响降至最低。

6、复杂的设计  把复杂的算法 封装,因为 复杂的模块 出错的概率 比较大 需要优化的概率很高 这跟第五条类似

7、状态变量   把状态描述的变量 尽量用枚举而非 布尔变量。 一开始用布尔变量来定义后,往往到后期会发现 除了 true 和 false 以外还需要别的状态,就改用枚举。

且使用访问器子程序 访问状态的值  而不是 对状态变量的直接检查。

8、数据量的限制  如定义一个具有100个元素的数组的时候,实质上向外部透露一些它们并不需要的知道的信息,这样会增加理解系统的复杂度。应该用 常量 MAX_LENGTH 来隐藏。

原文出处:http://www.cnblogs.com/zhuojun/

时间: 2024-10-18 00:54:35

码农小手册1的相关文章

码农小汪-synchronized

synchronized 英 ['s??kr?na?zd] 美 ['s??kr?na?zd] 同步的 网络 同步; 关键字; 同步锁 同步的原理 monitor 监测仪;  显示屏,屏幕; JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样.代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现.monitoren

码农小汪-SQL 图形界面设计约束,unqiue,check Default Foreign

怎么说呢,这个东西并不是经常的使用,慢慢的记不住怎么玩得啦,网上找的资料,复习复习哈! SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL 1.Primary Key约束 在表中常有一列或多列的组合,其值能唯一标识表中的每一行. 这样的一列或多列成为表的主键(PrimaryKey).一个表只能有一个主键,而且主键约束中的列不能为空值.只有主键列才能被作为其他表的外键所创建. 创建主键约束可以

码农小汪-设计模式之-命令模式

大话设计模式的例子讲的非常的好,理解起来也方便!有时候忘了.想到这些特殊的例子感觉就是特别爽. 烤羊肉串带来的思考! 路边摊羊肉串: 老板,我这里排的比较先啊,我最先给钱.老板这个没有熟啊.我的是 辣的啊!老板没有放盐啊!场面混乱,已经分不清谁是谁的啊,人太多了.烤肉的质量也受到了影响,心情不好也就不好啊.烤肉的人心情受到了顾客的影响. 店面的烤肉 服务员,给我来两串羊肉串,2鸡翅,啤酒两瓶. 鸡翅没得啦,点别的吧,肉精吧.辣一点. 两者的比较啊: 路边的生意不稳定,往往就是那几个时间,客源不固

码农小汪-struts2学习2-Structs2简单使用流程

从第一篇,我们简单的指导了,整个大致的流程之后我们可以创建使用一个简单的步骤需要知道涩.虽然现在的编译器已经给了我们足够好的支持,但是还是需要知道的涩. structs2 简单的创建步骤 安装 Struts2的入口的配置文件,这个过滤器,让我们的整个框架在web上工作 filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispa

码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable

近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这样的直接的外键关联,悲观的做法!刚刚看到个帖子.有的公司表中一个外键都没得.直接在程序中处理这样的关联关系.假设在Hibernate中处理外键关系的话.我们首先得有个主表的对象吧,然后在创建外键.感觉有点啰嗦.为啥不直接操作呢! 我仅仅要晓得你这个Id是外键即可了.各有各的说法.我想你也在思考这个问

码农小汪-spring框架学习之9-基于 Java 的配置元数据 @ImportResource

基于 Java 的配置元数据 Spring 新功能 Java-cofiguration 支持@Configuration 类注解和@Bean 方法注解@Bean 注解用于表明一个方法将会实例化.配置.初始化一个新对象,该对象由Spring IoC 容器管理.大家都熟悉 Spring 的< beans/>XML 配置, @Bean 注解方 法和它一样.可以在任何 Spring @Component 中使用@Bean 注解方法,当然了,大多数情况下,@Bean 是配合@Configuration

哪些码农小习惯预示着高薪资?

原文链接 最近,Stack Overflow 发布了一篇 2017 开发者调查报告,分别从技能.工具.学习趋势等方面进行了数据统计,此次有超过 64,000 名开发者参与调查.分析这些数据,我们得到一个很有趣的结论:使用空格缩进的开发者比使用 TAB 缩进的开发者工资更高,是不是觉得有点扯?以下是统计结果截图: 你用Tab还是空格来处理代码缩进 在处理代码缩进时,使用Tab和空格都是可以的,在不同的IDE环境下,Tab对应的空格数也是不一样的,有的是2个,有的是4个,有的甚至8个.你用Tab还是

码农小汪-Spring MVC 处理器拦截器详解

处理器拦截器简介 spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理 常见应用场景 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记 录结束时间,从而得到该请求的处理

转:码农翻身全年文章精华

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥? 在大家的支持和鼓励下,还是坚持了下来,  回头看看走过的路,这一年过得还算充实. 很快就要过年了, 我也要休息一下, 春节后重新出发 ! 我把这一年来的精华文章整理了一下,作为节前的最后一篇, 欢迎转发分享. 再次感谢大家一年来的陪伴, 预祝大家春节快乐,万事如意! 大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP