作者:延晨、杨珺、营帅、雪冉、旭光我们收到的简历中几乎所有人都声称“熟悉面向对象”,但很少人能够概括面向对象方法和原则,面向对象设计和过程式设计的关键区别在哪,以及怎么定义和衡量可读性、究竟什么是可复用性、怎样的代码称为脆弱和僵化的。本文从 SOLID 原则出发,通过更贴近业务的解释性文字和具体的代码示例来回答这些问题。<br>什么是 SOLID?<br>在程序设计领域,SOLID 是由 Robert C. Martin(敏捷宣言作者之一,曾任敏捷联盟主席)在21世纪早期提出的便于记忆的首字母缩写,指代面向对象编程和面向对象设计的五个基本原则:单一功能、开闭原则、里氏替换、接口隔离以及依赖反转。在这一章我们只关注这些原则各自的定位和它们之间的关系。见下图:<br>概括地讲(下文会具体展开):单一职责是所有设计原则的基础,开闭原则是设计的终极目标。里氏替换原则强调的是子类替换父类后程序运行时的正确性,它用来帮助实现开闭原则。而接口隔离原则用来帮助实现里氏替换原则,同时它也体现了单一职责。依赖倒置原则是过程式设计与面向对象设计的分水岭,同时它也被用来指导接口隔离原则。<br>什么时候应该应用原则?<br>设计原则和设计模式都是经验的总结,方便分析和解决问题,但并不能用来判断是否存在问题。例如下面这段代码:<br>它违反了单一职责:这个 main 方法即获取了当前日期,又做了日期的处理,数据的写入。这个违反让它更难理解和维护了吗?它违反了开闭原则:很显然这个逻辑并不是可扩展的,只能通过修改的方式去增加功能。这个违反让它更难修改了吗?它违反了依赖倒置原则:main函数直接依赖底层模块fs的writeFile方法,调用main时必须和fs模块绑定。这个绑定让它无法在其他 fs 实现里复用,但是会有这个需求吗?<br>对于一个负责日常工作的、功能不太会扩展的小脚本而言,这段代码是比较完美的。当我们不认为它维护困难时,就不应该对它套用各种原则和模式来把问题复杂化(或过度设计)。当这段代码变得更复杂,我们发现它难以维护时,再去应用原则来诊断和分析问题。有这样的概念后,我们再来看具体的每项原则。<br>单一职责原则<br>内容:一个类只负责一件事,只有一个引起它变化的原因。<br>单一职责希望避免的问题很简单:避免修改一个地方反而引发另一个地方的问题。如果你的项目经常发生这样的问题,
"①首诉责任制　②投诉不申辩原则　③现场处理原则　④乘客满意原则⑤乘客投诉　“四不放过”原则　⑥投诉回复及时性原则　题目纠错　0　发布　创建题目　创建题库　题目信息:　创建者:　刷刷题用户　编辑次数:　难易度:　错误率:　【单选题】A　well　educated　man　usually　has　a　tolerant　attitude　towards　people　with　different　ideals()　【单选题】Question　8　to　10　are　based　on　the　following　news　item.　At　the　end　of　the　news　item,　you　will　be　given　10　seconds　to　answer　each　question.　Now　listen　to　the　news　Question　8　to　10　are　based　on　the　fol...　【单选题】In　this　section　you　will　hear　everything　ONCE　ONLY.　Listen　carefully　and　then　answer　the　questions　that　follow.　Mark　the　correct　answer　to　each　question　on　your　answer　sheet.　Questions　1　to　5　are　bas...　【单选题】Questions　11　to　18　are　based　on　the　conversation　you　have　just　heard.　【简答题】The　(frighten)()look　of　the　teacher　made　the　pupils　become　silent.　【简答题】How　many　of　us　would　temp　for　three　years　while　we　waited　for　the　perfect　job　Not　many　of　us,　perhaps.　But　Wentworth　Miller,　the　""Prison　Break""　star,　said　he　chose　to　wait　even　longer　time　(1)　he　foun...　【简答题】在考生文件夹下有一个数据库文件“samp3.mdb”,其中存在已经设计好的表对象“tEmployee”、“tSell”、“tBook”和宏对象“m1”,同时还有窗体对象“fBook”和“fEmployee”、子窗体“fSell”。请在此基础上按照以下要求补充“fEmployee”窗体的设计。　设置主窗体标题栏的显示标题为“雇员售书情况”。　【单选题】In　this　section　you　will　hear　everything　ONCE　ONLY.　Listen　carefully　and　then　answer　the　questions　that　follow.　Mark　the　correct　answer　to　each　question　on　your　answer　sheet.　Questions　1　to　5　are　bas...　【简答题】Prof.　Wilson’s　daughter　teaches　at　a　high　school　in　California,　and　she　(occasion)()flies　to　New　York　to　see　him.　【简答题】Although　New　Orleans　has　been　a　part　of　the　United　States　for　almost　two　centuries,　its　population　______　(对…感到自豪)　its　French　heritage.　【简答题】SECTION　A　In　this　section　you　will　hear　a　mini-lecture.　You　will　hear　the　lecture　ONCE　ONLY.　While　listening　to　the　lecture,　take　notes　on　the　important　points.　Your　notes　will　not　be　marked,　but　you　...　客服电话:18911528997　公司地址:　北京市海淀区紫竹院路81号院3号楼2层206-266　"