首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用一个主类可以在我的组件中包含我需要的所有类。这是不是很糟糕?

是的,使用一个主类包含所有需要的类是一个糟糕的设计。这种设计违反了单一职责原则和开闭原则,导致代码的可维护性和可扩展性变差。

单一职责原则要求一个类只负责一个功能或职责,而不是承担过多的责任。如果一个主类包含了所有需要的类,那么它的职责就会非常庞大,难以理解和维护。

开闭原则要求软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。如果使用一个主类包含所有需要的类,那么每次需要添加或修改功能时,都需要修改主类,这违反了开闭原则。

相反,更好的设计是使用模块化和面向对象的思想,将不同的功能和职责分解到不同的类中。每个类只负责一个特定的功能,通过类之间的组合和协作来实现复杂的功能。这样可以提高代码的可读性、可维护性和可扩展性。

对于组件化开发,可以使用依赖注入等技术来管理组件之间的依赖关系,避免一个主类包含所有需要的类。这样可以更好地解耦组件,提高代码的可测试性和可复用性。

总结起来,使用一个主类包含所有需要的类是一个糟糕的设计,应该采用模块化和面向对象的设计思想,将不同的功能和职责分解到不同的类中,提高代码的可维护性和可扩展性。

相关搜索:我需要使用带有@springbootapplication注解的主类中的环境在本例中,是否可以使用我创建的所有类通用的超类?我可以在我的PHP脚本中将CURL库作为一个类包含在内我可以在Angular组件中使用带有网格类的bootstrap网格吗?我可以在Quartz任务中创建Spring上下文吗?或者这是一个糟糕的想法?如果我使用反射来获取扩展一个公共类的类,那么列表是否也会包含所有递归继承的类?我可以在函数组件中触发onclick事件来更新类组件的状态吗?我有一个包含多个方法的Class文件,我可以从Testcase中调用这个类吗我是否需要使用类在Perl中的子类中使用它的方法?在pyscipopt中,可以在我的主优化模型中使用包含优化模型的函数吗?为什么我可以在另一个单独的类中使用在一个类中定义的方法?需要一个类,我可以将xml反序列化为不需要自动生成代码的类。使用自动实现的属性在我的适配器类中的列表视图arrayadapters中,我无法使用数据类检索列表,并且已在主活动中定义了数组我需要帮助才能使用cifar 10中的8个类。通常它会加载所有10个类当我在不同的类中从构造函数转到主方法时,我丢失了数据。这是怎么回事?我已经制作了一个不是working.How的AdLoader.java类,如果我在Java中制作了一个单独的AdLoader.java类,我可以在安卓中访问广告吗?我可以在jQuery中使用"if“语句来检查一个集合中的类和另一个集合中的类吗?我是否可以在一个类中定义一个特定的类类型,这个类在typescript中实现一个带有泛型类型的接口?在许多情况下,我需要一个类来调用包含它的类作为属性--这应该如何实现?我需要从不同的类中获取一个字段才能出现在类中。我现在在bluej中使用
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编写模块化CSS——BEM

我是不是应该把所有的都用一遍,是不是只有一种方法才适合我,或者我是不是应该参考它们做一个自己的架构?。 我开始只用一种方法。...我必须 立即知道一个组件是否使用了 JavaScript,所以如果我改变了它的 CSS,我不会意外地破坏任何组件。 在我的探索中,我发现 BEM 和 命名空间 符合我寻找的标准。...BEM 使用 .form 而不是 元素的原因是因为 类允许无限的可重用性,而即使是最基本的元素也可能改变样式。 按钮很好地阐释了可以包含不同样式的块。...如果设置了一个 .button 类的按钮,则可以在任何 元素上选择是否使用 .button 类。...但是有两种方法可以编写简洁的 CSS,而不需要额外的 class! 方法 1:使用 mixin 第一种方式,如果使用 Sass 或任何其他预处理器,则 使用mixin来封装 需要重用的 所有代码。

2.1K70

你的测试策略说了算

每次在添加新功能时,我都会感谢已经编写好的测试,特别是在包含了众多功能的大型服务中。我无法想象手动去验证每一个功能点意味着什么,那可能是个无稽之谈。...一个使用 Spring 实现的后端应用程序,我通常会看到生产类和测试类之间的一对一映射,如图所示: “包含主要逻辑的类”通常被叫作“服务”。...由于不需要模拟内部类,因此减少了工作量。 我们不需要模拟很多类,而是模拟模块和框架组件,因此在测试时不需要启动应用程序。 缺点: 需要更多的思考。进行有意义的命名和分组是很复杂的。...分离领域和框架逻辑的一种扩展做法是将每个功能的领域逻辑放在一起,以实现内聚性。与每个功能相关的所有逻辑都在同一个模块中实现,而不是分散在多个模块中。...我已经经历了一场噩梦,从一个单体代码库中找出所有需要修改的地方。我们密集调试了几个月,而主要的改动在两天内就完成了。

20120
  • Web前端进阶之路: 提升代码质量篇

    高质量的代码的重要性 高质量的代码体现在两个方面: 易于维护。 Bug少。 当需求发生变化,或出Bug需要改时,易于维护的代码改起来更容易,更快。改那些糟糕的代码,费时费力不说,心情也变得糟糕。...2 语义化CSS的类名 根据模块的功能来命名,而不是根据样式来命名。如:给红色的提示文字起类名。类名可以叫 tip,不应该叫 color-red。...除此之外,JavaScript 标准代码风格中没有涉及的规则,但我觉得要验证的。可以用 ESLint 来补充验证。我觉得需要遵守的规则,见这里。...指通过命名规则之类的约束来减少程序中的配置,旨在减少软件开发人员需要做决定的数量,获得简单的好处,而又不失灵活性。 写组件时,对属性的设计,可以用约定优于配置的做法。...代码评审可以是一个人 Review 其他人的代码,也可以是一群人一起 Review 代码。 代码评审的好处: 在项目的早期发现缺陷,将损失降至最低。

    1.7K20

    React Hooks 还不如类?

    一个 hooked 函数并不是一个常规函数,因为它具有状态,有一个看上去很奇怪的 this(也就是 useRef),并且可以具有多个实例。...到目前为止,这里说的区别还是很清楚的——如果需要状态或生命周期方法,则使用类,否则,使用函数或类都行。...就个人而言,我喜欢这样的想法:当我偶然碰到一个函数组件时,我可以立即知道这是一个没有状态的“哑组件”。然而引入 Funclass 之后,就再也没这么简单明了了。 2....很难在组件之间重用有状态逻辑 React 没有提供一种将可重用行为“附加”到组件的方法(例如,将其连接到一个存储)……React 需要更好的原语来共享状态逻辑。 很讽刺不是吗?...[……]hooks 使你可以根据各个部分的相关性(例如设置订阅或获取数据)来将一个组件拆分为一些较小的函数,而不是根据生命周期方法强行拆分。 如果你在使用存储,那么上面这段话基本没意义。

    84110

    Flash WebGame 开发经验心得和PureMVC框架细说

    你现在是不是点晕了,这是正常的,其实我也有点晕!当你代码写到一定规模后,你会更晕。...2,UI的FLA层 次结构是这样的:第一层是文档类或者与UI主类关联的某个MC,我们选用的是MC的方式,因为MC的方式更灵活;第二层是这个MC里的所有组件,这些组件 大部分是根据功能划分在一起的一组元件...对应FLA的层次结构,AS的结构如 下:文档类或者主MC关联的类是第一层,这个类里持有所有的界面元件的引用;第二层是这些界面元件对应的组件CLASS,组件的功能都是在这里实现的,比 如个人面板的MC将会对应一个...正是在主MC对应的UI主类中,比如当获得MyPanel对应的MC后,就会立刻public var myPanel:MyPanel = new MyPanel(myPanel_mc);当所有的组件注册完成后...,这个UI主类就持有了所有组件的引用,可以方便主程序调用;代码的第三层其实就是共用 组件,比较特殊的是,我的共用组件,比如滚动条,也是用代理模式写的。

    65420

    每个程序员要注意的 9 种反模式

    如何避免 把整洁的、可读性强的、能运行的代码放在首位,使用已知的和测试过的算法和工具。当需要找到瓶颈和决定优化优先级时,使用分析工具。依赖于测量而不是臆想和推断。 例子和标志 在找瓶颈之前做缓存。...花大量时间来辩论和决定琐碎、太主观的问题的这种趋势。 糟糕的原因 这是在浪费时间。Poul-Henning Kamp 在这封邮件里进行了深入讨论。...如何避免 注意,什么时候可以简化设计新增类,以及解耦代码中不必要的耦合部分 棘手的部分 新增类不是魔法弹。通过分解大型类来简化设计需要深入的考虑分析责任和需求。...使用未命名的数字或字符串字面量,而不是在代码里命名为常量。 糟糕的原因 主要问题是由于没给数字或字符串字面量一个描述命名或其他形式的注解,而导致它们的语义被部分或完全的隐藏了。...糟糕的原因 数字很棒。避免本文提及的两个反模式(提前优化和单车车库)的主策略是分析或做A/B测试,来帮助你根据数字优化或做决策,而不是光靠凭空想。然而,盲目的信任数字也很危险。

    2K20

    随心自然地整理Python代码

    精心设计的函数可以节省空间并且用作句子、组件或逻辑单元,精心设计的类可以极大地扩展项目里的词汇量,这两者的结合可以让你用段落来表述,而不是胡乱地叫喊命令。...⚠️ 在下一个示例中,我将使用称为pyttsx3的文字转语音的库。...最后是执行,这与前一级的结构非常相似: 1_VVhWGKQcbSkLyuvIcw6uJw.png 在这种模式中,有几点值得注意:如果你使用类作为对象,则需要持有一个全局引用,以便在函数和主函数中与它们进行交互...虽然这次节省下来的重读代码的时间很遗憾地花在了第一次整理代码上,但是如果你想让更多的人参与到你的代码中来,这是至关重要的。...视情况而定,在工作中,我通常会使用Template/Boilerplate;对于我自己的项目,我通常从单个文件上的类和函数开始,随着项目的进展,我通常开始制作单个文件结构,如果项目扩大,它最终会变成一个文件层次结构

    1K95

    【译】编写高质量JavaScript模块的4个最佳实践

    `; } } 随着时间的推移,我注意到了重构默认导出的类(或函数)的困难。在重命名原始类时,使用者模块中的类名没有改变。 更糟糕的是,编辑器没有提供有关要导入的类名的自动完成建议。...`; } } 使用命名导出,编辑器可以更好地进行重命名:每次更改原始类名时,所有使用者模块也会更改类名。 自动完成功能还会建议导入的类: ?...4.避免较长的相对路径 我发现很难理解一个模块的路径包含一个,甚至更多的父文件夹: import { compareDates } from '../.....5.结论 JavaScript模块非常适合将您的应用程序逻辑拆分为多个独立的小块。 通过使用命名的导出而不是默认的导出,可以在导入命名组件时更轻松地重命名重构和编辑器自动完成帮助。...一个组件应该有多少个函数或类,这些组件应该如何与每个组件相关联?支持高内聚的模块:它的组件应该紧密相关并执行一个共同的任务。 包含许多父文件夹../的长相对路径很难理解。将它们重构为绝对路径。

    98220

    常青:下一代音视频SDK的方案设计

    文 | 常青 整理 | LiveVideoStack 我们团队在腾讯云主要做音视频通讯类的SDK,这一部分包含功能相对比较丰富,包括RTC通讯、直播推流、播放器、短视频的录制、音视频的特效处理、还包括IM...在软件研发过程中很常见,一群人聚在一起,立项后进入敏捷迭代,快速上线,不断地升级一个又一个版本,功能堆积,出现维护困难,直到发现实在难以维护,一致要求重构。...3.2 挑战二:RT-Cube™ 的版本管理 第二个挑战是版本的问题,提供的功能非常多,不是所有客户都需要所有功能,要组合需要的功能。我们需要面对要有多少版本的问题。...我们给出一些比较容易选择档位,对于会议通讯场景可以使用Speech模式;对于不太确定的场景可以使用Default,比较“万金油”;对于主打音乐可以用Music音质模式;还提供如游戏般全定制设置,自定义所有想要的参数...上图中可以看出云和端一体,整个系统都不是单独模块战斗,是由很多模块共同协助。中控大脑做了多轮基于数据的改进。 4.3.2 推流 网络模块还有一些较为细节的部分。我们把场景主要分成两种直播类和通讯类。

    70830

    下一代音视频SDK的方案设计

    我们需要处理一些绕不开的困难。 2. 一座塔的故事 我是一个比较喜欢讲故事的人,我将从一座塔的故事开始分享我的一些感受。 2.1 《圣经》中的巴比伦塔 《圣经·旧约》中讲的是犹太教的故事。...在软件研发过程中很常见,一群人聚在一起,立项后进入敏捷迭代,快速上线,不断地升级一个又一个版本,功能堆积,出现维护困难,直到发现实在难以维护,一致要求重构。...3.2 挑战二:RT-Cube™ 的版本管理 第二个挑战是版本的问题,提供的功能非常多,不是所有客户都需要所有功能,要组合需要的功能。我们需要面对要有多少版本的问题。...我们给出一些比较容易选择档位,对于会议通讯场景可以使用Speech模式;对于不太确定的场景可以使用Default,比较“万金油”;对于主打音乐可以用Music音质模式;还提供如游戏般全定制设置,自定义所有想要的参数...上图中可以看出云和端一体,整个系统都不是单独模块战斗,是由很多模块共同协助。中控大脑做了多轮基于数据的改进。 4.3.2 推流 网络模块还有一些较为细节的部分。我们把场景主要分成两种直播类和通讯类。

    55120

    如何在现有的 Web 应用中使用 ReactJS

    从 jQuery 到 React 我最近的任务是用 React 重构一个使用 jQuery 写的功能。这个过程困难重重,因为大量的 jQuery 分散在代码段中。...因为我们希望组件之间通信,所以我们将它们放置在父级组件中,然后向下传递属性来更新每个子组件。这是 ReactJS 最基本的工作方式。 这种方式适用于多个 UI 组件被一个父组件包裹的情况。...使用 Redux 分享状态 类似 Redux(flux 的另一种实现)的库可以很容易的实现应用中不同组件之间的通信。...总结 我希望这篇文章可以让你更好地了解需要关注的内容以及如何将 ReactJS 运用到现有的应用中。...主要的解决方法就是,如果你使用 jQuery 处理 UI 片段,那么你可以将容器元素替换成一个 React 组件。如果你需要在多个组件中分享状态,那么你可以使用容器方法或者类似 Redux 的库。

    7.8K40

    狂野的 #imports: 如何驯服文件依赖关系

    与所有基于 C 语言的语言一样,Objective-C 文件通常成对出现:有一个头文件和一个实现文件。头文件和实现文件都可以使用 #import 指令来包含其他头文件。...当你在一个项目中工作时,这并不是什么大问题,但当你开始一个新项目并想重复使用一些源文件时,这就会立刻带来麻烦。 但是,.h 文件中不必要的 #imports 会更糟糕:问题会呈指数级增长!...这也是为什么我把协议声明放在自己的头文件中,而不是与它们合作的类放在一起。这样可以保持依赖关系图的简洁。...但是,即使你放弃了所有不必要的 #import,你仍然会在一个长长的列表中看到一个又一个的#import。在开发过程中,很容易将越来越多的东西集中到一个类中。...以下是管理文件依赖关系时需要注意的事项: 头文件中的 #import: #import 你要继承的超类,以及你要实现的协议。 前置声明其他所有内容(除非来自框架的主头文件)。

    18210

    清晰的前端架构

    嗯~如果没有定义规则,那么开发者可能会在他们的组件直接使用 DTOs 或者与服务层进行通信而不使用存储层。或者说糟糕的是,组件直接与服务层通信,这是多愚蠢。 我们怎么预防这些错误呢?...SOLID 中还有一个原则 -> 里氏替换原则(Liskov Substitution Principle):子类应该能够替换掉父类而不导致程序的错误行为。...笔记:这些原则可以通过使用 Bit 很容易实现。...在 Bit Workspace 中,我们可以独立构建,测试,版本控制和文档化重用的组件(函数、UI 元素或者数据模型),然后将它们发布到 Bit 的 component-sharing platform...但是一个人如何确保代码可维护性呢?因为众所周知,业务逻辑随着时间的推移而增长。简而言之,我经常听到下面说法。 代码在历史中逐渐增长。

    34420

    如何在已有的 Web 应用中使用 ReactJS

    这并不是使用 jQuery 更改 DOM 的唯一策略,但很常见。...因为我们希望组件之间通信,所以我们将它们放置在父级组件中,然后向下传递属性来更新每个子组件。这是 ReactJS 最基本的工作方式。 这种方式适用于多个 UI 组件被一个父组件包裹的情况。...使用 Redux 分享状态 类似 Redux(flux 的另一种实现)的库可以很容易的实现应用中不同组件之间的通信。...总结 我希望这篇文章可以让你更好地了解需要关注的内容以及如何将 ReactJS 运用到现有的应用中。...主要的解决方法就是,如果你使用 jQuery 处理 UI 片段,那么你可以将容器元素替换成一个 React 组件。如果你需要在多个组件中分享状态,那么你可以使用容器方法或者类似 Redux 的库。

    14.5K00

    你写注释吗?写你就输了

    在某些情况下,我敢说,注释可以弥补我们在代码中没有完全表达出来的意思。因此,写注释不值得赞美,而是应该停下来问问自己,是否有更好的方式可以用代码来表达自己。 ?...在本例中,开发人员让读者知道,当与回调函数一起使用时,QT 函数不是线程安全的。一般来说,如果一条注释可以避免某个人在编程时陷入绝望,那么它就是有用的。 """ 许多 Qt 函数都不是线程安全的。...它可能是要求其他人想一个更好的名字,或者是提醒他们根据计划事件做出修改。 请记住,TODO 注释不是在系统中留下糟糕代码的借口。本质上,每一行代码都是一种负担——最安全、最快的代码是根本没有代码。...注释掉代码 在团队准备好删除代码之前先将其注释掉似乎是一个好主意,但是不要这样做。注释代码是一种弊端,团队中的其他成员不会删除它,因为他们会认为它很重要。我们不是都在使用源码控制吗?...在这个例子中,注释的数量比代码的数量还多——这让我很恼火。 class ComplexNumber: """ 这是一个用于复数的数学运算类。

    47820

    【译】Understanding SOLID Principles - Single Responsibility

    比如,在类中,类方法仅完成某家独立的事情,而不是两件,如下: class UserComponent { // 这是第一件事情,获取用户详情数据 getUserInfo(id) {...(译者注:我理解意思应当是,应当尽可能的让已有的类或者方法变得简单、轻量,不需要所有事情都亲自为之) 总之,不要让你的对象成为上帝对象。...举个例子,如果一段客户端代码在调用class A的过程中,必须要先了解有关class B的细节,那么我们说A和B耦合在了一起。通常来说,这是一件糟糕的事情。...code } } 之后过了一段时间,在某一天,你的经理要求你增加一个新功能,比如说去调用别的class中的每个函数,从而可以使当前这个组件完成更多的工作。...追踪依赖 对于一个类,检查它的构造方法是否包含了太多的参数,因为每一个参数都作为这个类的依赖存在,同时这些参数也拥有自身的依赖。如果可能的话,使用DI机制来动态的注入它们。

    34010

    「领域驱动设计」DDD,六边形架构,洋葱架构,整洁架构,CQRS的整合架构

    要使此模式正常工作,最重要的是创建适合应用程序核心需求的端口,而不是简单地模仿工具api。 主适配器或驱动适配器 主适配器或驱动适配器围绕一个端口,并使用它来告诉应用程序核心要做什么。...为了解耦类,我们使用依赖注入,将依赖注入到类中而不是在类中实例化,依赖倒置,使类依赖于抽象(接口和/或抽象类)而不是具体类。...共享内核将包含应用程序和域事件之类的功能,但它也可以包含规范对象,以及任何需要共享的内容,请记住,共享内核的任何更改都将影响到应用程序的所有组件,因此共享内核应该尽可能少。...例如,它将包含事件描述,而不是包含事件类的共享内核。名称、属性、甚至方法(尽管这些在JSON之类的不可知语言中可能更有用),这样所有组件/微服务都可以解释它,甚至自动生成它们自己的具体实现。...然而,这并不总是需要的,事实上在大多数情况下,处理程序将包含用例的所有逻辑。如果需要在另一个处理程序中重用相同的逻辑,则只需要将逻辑从处理程序提取到单独的应用程序服务中。

    2K30

    Android工程模块化平台的设计

    另外再举个使用的例子:我有一个订单模块,订单模块需要播放铃声,比如大家在饭店经常听到“您有新的饿了么订单,请及时处理”。...那作为服务提供方需要做些什么事呢,非常简单,你只需要给你的对象提供public static方法,并加上一个@Creator注解,告诉IronBank这是一个创建器方法就可以了,其他任何事情,都不需要考虑...,当前最新构建的SNAPSHOT是哪个,以及每个版本的更新日志;这样做了以后,在跨团队协作上的沟通就大大降低了,如果你已经接入或者即将接入的模块是另一个团队开发的模块组件,那你可以直接关注它,它的所有版本变动日志...首先看submodule:这种结构是Android默认的多模块结构,在一个工程下面有多个模块。图上每个绿色的方块都代表了一个git仓库,然后我们看到所有子模块都包含在主工程模块内。...当然,他也有不适合的,就是协作开发的时候,所有人都在app module上测试自己的模块,很容易互相影响,主工程的git分支也会非常繁杂。

    37440

    ConcurrentDictionary 对决 Dictionary+Locking

    在 MSDN 中的 Dictionary 类文档的线程安全的描述中指出,如果你需要用一个线程安全的实现,请使用 ConcurrentDictionary。...所以,既然现在已经有了一个线程安全的字典类,我们再也不需要自己实现了。很棒,不是吗? 问题起源 事实上我之前只使用过 CocurrentDictionary 一次,就是在我测试其反应速度的测试中。...因为在测试中它表现的很好,所以我立即把它替换到我的类中,并做了些测试,然后,居然出了些异常。 那么,到底哪出了问题?不是说线程安全吗? 经过了更多的测试,我找到了问题的根源。...比如我们需要构建一个组件,其使用专有线程处理异步消息,并且依赖于消息的接收顺序。当实例化该组件时,会创建一个线程。当销毁这个组件实例时,线程也会被结束。...我认为像这种在并行方式下创建对象,最后只有一个被使用的情况不会产生我所描述的问题。 我想阐述的情况和问题可能并不总是能复现,在并行环境中,我们可以简单的创建两个对象,然后丢弃一个。

    1.6K70

    Android工程模块化平台的设计

    另外再举个使用的例子:我有一个订单模块,订单模块需要播放铃声,比如大家在饭店经常听到“您有新的饿了么订单,请及时处理”。...那作为服务提供方需要做些什么事呢,非常简单,你只需要给你的对象提供public static方法,并加上一个@Creator注解,告诉IronBank这是一个创建器方法就可以了,其他任何事情,都不需要考虑...,当前最新构建的SNAPSHOT是哪个,以及每个版本的更新日志;这样做了以后,在跨团队协作上的沟通就大大降低了,如果你已经接入或者即将接入的模块是另一个团队开发的模块组件,那你可以直接关注它,它的所有版本变动日志...首先看submodule:这种结构是Android默认的多模块结构,在一个工程下面有多个模块。图上每个绿色的方块都代表了一个git仓库,然后我们看到所有子模块都包含在主工程模块内。...当然,他也有不适合的,就是协作开发的时候,所有人都在app module上测试自己的模块,很容易互相影响,主工程的git分支也会非常繁杂。

    50430
    领券