我在一次技术面试中被问及项目的内聚和耦合。我广泛地解释了他们的定义,尽管我没有像他说的那样正确回答问题的第二部分。“我们如何在一个项目中同时实现高内聚和松散耦合的设计,请解释一下这种方法应该如何在单体项目中实现?”我回答说这两个目标是矛盾的,所以我们需要找出每个项目或模块的最佳选择,但我无法提供全面的答案。如果有人帮助我,我将不胜感激。 最佳答案 我首先要回答的是,这与你所说的“这两个定义是矛盾的”恰恰相反。我将引用JohnW.SatzingerSystemAnalysisandDesigninaChangingWorld,KeyF
唯一不变的就是变化本身。我们经常讲的系统、子系统、模块、组件、类、函数就是从逻辑上将软件一步步分解为更细微的部分,即逻辑单元,分而治之,复杂问题拆解为若干简单问题,逐个解决。逻辑单元内部、外部的交互会产生依赖,从而产生了内聚、耦合概念。内聚主要描述逻辑单元内部,耦合主要描述逻辑单元之间的关系。我们经常讲的高内聚,低耦合,如何做到,做到的标准是什么?这就是开发、设计、架构的五大原则所体现出的价值,最终达到高内聚,低耦合的软件目标。耦合逻辑单元之间存在依赖,导致改动可能会互相影响,关系越紧密,耦合越强,逻辑单元独立性越差。比如模块A直接操作了模块B中数据,则视为强耦合,若A只是通过数据与模块B交互
唯一不变的就是变化本身。我们经常讲的系统、子系统、模块、组件、类、函数就是从逻辑上将软件一步步分解为更细微的部分,即逻辑单元,分而治之,复杂问题拆解为若干简单问题,逐个解决。逻辑单元内部、外部的交互会产生依赖,从而产生了内聚、耦合概念。内聚主要描述逻辑单元内部,耦合主要描述逻辑单元之间的关系。我们经常讲的高内聚,低耦合,如何做到,做到的标准是什么?这就是开发、设计、架构的五大原则所体现出的价值,最终达到高内聚,低耦合的软件目标。耦合逻辑单元之间存在依赖,导致改动可能会互相影响,关系越紧密,耦合越强,逻辑单元独立性越差。比如模块A直接操作了模块B中数据,则视为强耦合,若A只是通过数据与模块B交互
好书推荐微习惯代码质量衡量指标可以分为两部分:设计规约和代码规范。设计规约是思想,代码规范是思想的具体实现。《设计规约》有以下部分:扩展性可读性维护性容错性健壮性鲁棒性高内聚/低耦合《代码规范》有以下部分:编码规范:是否遵守了编码规范,遵循了最佳实践。潜在的BUG:可能在最坏情况下出现问题的代码,以及存在安全漏洞的代码。文档和注释:过少(缺少必要信息)、过多(没有信息量)、过时的文档或注释。重复代码:违反了Don’tRepeatYourself原则。复杂度:代码结构太复杂(如圈复杂度高),难以理解、测试和维护。测试覆盖率:编写单元测试,特别是针对复杂代码的测试覆盖是否足够。设计与架构:是否高内
我在MySQL销售数据库中有两个表:订单表:CREATETABLEsalestest.`orders`(`ID`int(11)unsignedNOTNULLauto_increment,`OrderDate`datetimeNOTNULL,`CustomerID`int(11)unsignedNOTNULL,PRIMARYKEY(`ID`),UNIQUEKEY`ID`(`ID`),KEY`OrderDate`(`OrderDate`),KEY`CustomerID`(`CustomerID`))ENGINE=InnoDB;INSERTINTOsalestest.ordersVALUES
最近在看《重构:改善既有代码的设计》(后面简称《重构》),了解到一个写出好代码的思路。在说这个话题前,好代码是什么样子,可扩展性高,可复用性高,功能内聚,代码解耦。什么意思呢?我用搭积木来举例:扩展性高就是想要在搭好的积木增加一点功能,可以很简单,很方便的实现;可复用性高就是用积木做的一个小单元,比如乐高积木的一些小零件就是可复用性的代表;功能内聚就是积木都在内部发生作用,比如,我上次拼装乐高汽车,这个车能够在用力一推下向前走,而我在外面是看不到这个功能怎么实现的(当然我在拼的时候知道)。代码解耦就是积木模块之间依赖关系并不大,比如,乐高积木中有一个凤凰站在枝头的,这里面凤凰和树之间的依赖关系
内聚表示模块内部代码成分之间联系的紧密程度,是从功能角度来度量模块内的联系。一个好的内聚模块应当恰好做目标单一的一件事情。根据内聚度从高到低的排序,可列出下列7中内聚类型。功能内聚:完成一个单一的功能,各个部分协同工作,缺一不可。顺序内聚:处理元素相关,而且必须顺序执行。通信内聚:所有处理元素集中在一个数据结构的区域上。过程内聚:处理元素相关,而且必须按特定的次序执行。时间内聚:所包含的任务必须在同一时间间隔内执行。逻辑内聚:完成逻辑上相关的一组任务。偶然内聚:完成一组没有关系或松散关系的任务。一般来说,系统中各模块的内聚越高,则模块间的耦合就越低;内聚高使得模块的可理解性和维护性大大增强。因
在Safari和Chrome中测试-结果相同,所以我认为这是iOS问题。只有在模态框内有输入并且我点击该输入时才会发生这种情况。在输入获得焦点和原生iOS键盘变得可见的同一时刻。模态下方的页面在同一时刻自动滚动到其高度的50%。这种行为是完全不需要的,我不知道如何阻止这种默认的iOS“功能”。演示: 最佳答案 只是在这里添加一个答案,以防人们偶然发现这个问题(ratherthanyourotherquestion,whichhasagreatdemotoillustratethisissue)我们在工作中遇到了类似的问题。正如您所提
在Safari和Chrome中测试-结果相同,所以我认为这是iOS问题。只有在模态框内有输入并且我点击该输入时才会发生这种情况。在输入获得焦点和原生iOS键盘变得可见的同一时刻。模态下方的页面在同一时刻自动滚动到其高度的50%。这种行为是完全不需要的,我不知道如何阻止这种默认的iOS“功能”。演示: 最佳答案 只是在这里添加一个答案,以防人们偶然发现这个问题(ratherthanyourotherquestion,whichhasagreatdemotoillustratethisissue)我们在工作中遇到了类似的问题。正如您所提
我必须编写一个非常小的Python程序来检查某组坐标是否全部连接在一起(通过一条线,而不是对角线)。接下来的两张图片显示了我的意思。在左图中,所有颜色的组都是有凝聚力的,在右图中不是:我已经编写了这段代码,但它似乎无法正常工作,我很困惑,关于如何解决这个问题有什么想法吗?defcohesive(container):co=container.pop()container.add(co)returnconnected(co,container)defconnected(co,container):done={co}todo=set(container)whilelen(neighbour