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

为什么在类属性中没有复杂的逻辑被认为是最佳实践?

在类属性中没有复杂逻辑被认为是最佳实践,主要是因为这样可以提高代码的可读性、可维护性和可测试性。

当一个类的属性包含复杂的逻辑时,这个类就变得难以理解和维护。如果一个类的属性只包含简单的数据,而不是复杂的逻辑,那么这个类就会变得更加简单、清晰和易于理解。

此外,如果一个类的属性包含复杂的逻辑,那么这个类就会变得更加难以测试。因为在测试时,需要考虑到属性中的逻辑,这会增加测试的复杂性和难度。

因此,将复杂的逻辑从类属性中分离出来,可以提高代码的可读性、可维护性和可测试性,这是一种最佳实践。可以使用其他方法,如工具类、辅助类或者策略模式等,来实现复杂的逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...Paste_Image.png 按照我们已有的多态的概念,第二个应该是输出sub才对,但却输出了super。这是为什么呢?...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...访问隐藏域的方法 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子中的代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

3.5K40
  • 【JAVA-Day62】Java继承:面向对象编程中重要的基石

    引言 在Java世界中,继承被认为是面向对象编程的基石之一。它不仅提供了代码复用的机制,还为多态性的实现打下了坚实的基础。...让我们深入了解继承为什么被认为是编程的利器。 继承在Java编程中具有重要性,它是一种强大的面向对象编程技术。下面详细介绍继承的重要性和优势: 1....探讨何时应该选择组合而非继承,以避免类层次结构的过度复杂化。 2. 继承的最佳实践 抽象类 vs. 接口 详解抽象类和接口之间的区别以及如何选择使用它们。...最佳实践与总结 总结使用继承的最佳实践,给出一系列注意事项,并强调在实际开发中应用这些技巧的重要性。...继承的实践总结 最佳实践和注意事项 总结使用继承的最佳实践,包括避免过度继承、保持良好的封装等,并强调在继承设计中的一些关键注意事项。

    12910

    无用的设计模式-上篇

    根本原因是,随着软件规模和复杂度的快速增长,如何高效高质的构建和维护这样大规模的软件成为了一大难题。 软件复用被认为是解决这一危机的一条可行路径,而面向对象的思想则很好的解决了复用问题。...问题:它是场景中想要达成的目标与现状之间的落差。通常一个模式中的问题,代表的是一类问题,不特指某一个具体的问题。 方案:针对模式中的问题,存在已经被反复实践验证过的最佳解决方案。...我们使用 问题=>模式的思路来分析下在这个过程中可能会遇到的问题: 创建实例过程太复杂? 为什么复杂?是依赖对象太多?有办法解耦吗? 是对象本身属性多?可以按需初始化吗?...1.封装:本质目的是将类实现者与使用者分离,从类内部来看,只包含自己的属性,尽量不依赖其他类,只暴露必要的行为。我们经常提到的高内聚,低耦合是对它最佳的体现。...区别在于,继承表达 is-a的逻辑关联,目的在描述结构,而不是复用。 五、总结 本文围绕设计模式在业务中难以落地实践的现象,总结了一些可能的原因。

    52020

    专访企业架构学者Svyatoslav Kotusev

    核心的关键点是,在没有真正实践 EA 的组织中工作是根本无法学习到 EA 技能的,所以这将是一个可遇而不可求且漫长的过程。...TOGAF 显然与成功的 EA 实践没有任何关联(除了确实产生了一些 EA 工件和其他琐事),除此之外,理应被认为是无用的。然而,许多人却研究它并试图「正确地」解释它,想弄清楚该怎么做。...令人惊讶的是,根本不存在真正的 EA 最佳实践——这一事实并没有阻止公众继续在 TOGAF 中寻找 EA 成功的关键。...我对 EA 工件及其在组织中的使用进一步分析得出的结论是,尽管它们具有复杂的多样性,但它们都可以简化为只有六种具有独特属性的通用类型,我将其命名为考量(Considerations)、标准(Standards...简单地说,在您的示例中,EA 类工作发生在客户方,而不是顾问/供应商一方。

    25120

    当中台过气,微服务回归单体,DDD的意义何在?

    在项目实践中,不知道你有没有遇到过这样的一种场景:技术同学会根据产品同学的一段描述立马会陷入到技术实现中,等到验收的过程中才会说出:“哦,原来你只需要实现这种需求呀”的感叹,这就是没有找到核心问题所在。...在实践中,业务实体往往对应着一个实体类,这个实体类有唯一的标识、属性、以及其所有的业务方法。...3.2 合并的最佳实践:领域事件 在描述业务的过程中,往往会有这样一种描述:当某种事件发生后,会触发后续的事件或者用户进一步的行为操作,在领域驱动中会把这种有明显先后因果逻辑的事件称之为领域事件。...在领域事件中,会发现不同事件往往属于不同的领域服务之间,比如用户在购买物品支付成功后,会触发发货流程,这里的支付和发货就属于不同的领域,并在逻辑上有先后的顺序。...一种最佳的实践是在领域专家的主导下项目相关的同学一起进行头脑风暴,联想和关联到和业务有关的所有事件,但是这里的难点并不是如何发散,而是发散后如何收敛事件,收敛的本质是对于事件的有效分类,这需要可以洞悉业务本质的人才可以做到

    72944

    基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    因为在 MongoDB 中,一个聚合对象(包括子集合)被保存在数据库中的一个集合中,而在关系型数据库中,它被分布在数据库中几个表中。...当您使用关系数据库和ORM时,没有必要这样做。然而,它是领域驱动设计的一个重要实践。 聚合和聚合根最佳实践 以下最佳实践确保实现上述原则。...业务逻辑和实体中的异常处理 当你在实体中进行验证和实现业务逻辑,经常需要管理异常: 创建特定领域异常。 必要时在实体方法中抛出这些异常。...实体中业务逻辑需要用到外部服务 当业务逻辑只使用该实体的属性时,在实体方法中实现业务规则是很简单的。如果业务逻辑需要查询数据库或使用任何应该从依赖注入系统中获取的外部服务时,该怎么办?...有两个方式实现: 在实体方法上实现业务逻辑,并将外部依赖项作为方法的参数。 创建领域服务(Domain Service) 领域服务在后面介绍,现在让我们看看如何在实体类中实现它。

    3.1K30

    恕我直言:Web 开发太 low!!

    坏处就是多了一个类。 我们不应该不假思索的按照惯性思维去实践,在刚提到的这种面向接口编程不是完全可取的。接口的本意是可以有多种实现,也就是可能有多个子类。...,所以我觉得没必要接口实现分离,多出一个没有意思类实在是很丑。...,如果按照上面严格执行的话,就会产生很多属性基本一致的类,而且类型转换代码非常机械化。...所以最佳实践则是最少要两层。 如下图所示: 另外需要注意一点就是:其它系统的DTO等于自身系统的PO,也就是说上面提到的所有的类型其实是相对于数据流的位置而定的。...阿里为什么推荐使用 LongAdder? 新来一个技术总监:禁止戴耳机写代码。。 重磅!Spring Boot 2.7 正式发布 Java 18 正式发布,finalize 被弃用。。

    44530

    spring之Spring最佳实践与设计模式

    本篇博客将探讨Spring中的最佳实践,介绍常用的设计模式,提供实际示例代码和注释,并分享相关的注意事项。 摘要 本博客将重点介绍在Spring应用程序开发中的最佳实践和常用的设计模式。...词汇解释 最佳实践(Best Practices):在特定领域或领域中被认为是有效和高效的方法或技术。 设计模式(Design Patterns):在软件设计中,反复出现的问题和解决方案的模板。...详细介绍 Spring最佳实践 在Spring开发中,遵循一些常用的最佳实践可以提高代码质量、可维护性和性能。...工厂模式 工厂模式通过工厂类来创建对象,隐藏对象的创建逻辑。在Spring中,工厂模式常用于创建具有不同实现的Bean。...总结 在Spring应用程序开发中,遵循最佳实践和设计模式是确保代码质量、可维护性和可扩展性的关键。

    11310

    dotnet 谨慎在静态构造函数里使用锁

    在 dotnet 的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。...的 this 就分别属于不同的两个对象 然而静态构造函数就比较复杂起来的,大家都知道,在没有标记线程静态的前提下,所有的静态字段和属性等都是全局共享的,全局共享的就意味着所有的线程都访问到的相同的对象...如果真的如此关注了,那代码也写不了了,碰到的每一个类型,都需要关注一下的话,这个开发就不好玩了 这就是为什么最佳实践里面推荐不要在静态构造函数里面放复杂的逻辑,推荐只是做一些简单的初始化逻辑。...锁不是一个完美的解决方案,如果使用不当,那带来的线程安全问题将会有很多,而且锁的使用注意点也非常多,这就是为什么会有本文的核心原因 在使用锁的最佳实践里面,就有确定性的说法。...在静态构造函数里面使用锁将违背锁的最佳实践里面的确定性调用这一条,静态构造函数是在类型第一次碰到时被触发,也就是开发者是无法确定静态构造函数合适被调用的。

    62310

    高质量代码究竟依赖设计还是重构而来?

    有人认为是设计出来的,就像一栋稳固的大厦,如果没有前期优秀的设计那么肯定难逃豆腐渣工程的命运;也有人认为是重构出来的,软件的一个基本特性就是易变,随着时间的推移软件会不断腐化,因此需要不断重构来保持代码的高质量...首先声明一个 Strategy 基类,在构造函数中传入必要的参数,提供一个 getter 函数,用于计算最佳图片链接。每当有新的域名需要处理,就声明一个类继承 Strategy 基类。...落实到代码中就是,声明一个抽象类,将公共的逻辑都抽到该抽象类中,然后在子类中再实现具体的业务逻辑。 1.2.5 小结 这是一段不算复杂的逻辑,但如何放任不管,代码则会越来越复杂,直至无法维护。...最后是慎重无意的,我们在进行项目开发时,常常一边开发一边学习,你可能需要花一年甚至更长时间才能明白这个系统的最佳实践。...这建议对于绝大多数的人来说是无法接受的,因此我们应该认识到,在当前我们进行我们所认为的最佳实践时,实际上已经在欠下了技术债,这便是慎重无意的技术债。

    21510

    React组件设计实践总结05 - 状态管理

    , 我只能尝试解释一下我对分形的理解: 前面文章也提到过‘分离逻辑和视图’和‘分离容器组件和展示组件’,这两个规则都来自于 Redux 的最佳实践。...我为什么从 Redux 迁移到了 Mobx Mobx 与 Redux 的性能对比 总结 本节主要介绍的 Redux 设计的动机,以及围绕着这个动机一系列设计, 再介绍了 Redux 的一些缺点和最佳实践...视图是响应式数据的映射 数据变更. mobx 推荐在 action/flow(异步操作) 中对数据进行变更,action 可以认为是 Redux 中的 dispatch+reducer 的合体。...对于复杂的领域对象,会抽取为单独的类,比如前面例子中的Todo类, 抽取为类的好处是它具有封装性,可以包含关联的行为、定义和其他对象的关联关系,相比纯对象表达能力更强....换句话说适不适合大型项目是项目组织问题, Mobx 前期并没有提出任何解决方案和最佳实践。

    2.2K31

    高质量代码究竟依赖设计还是重构而来?

    有人认为是设计出来的,就像一栋稳固的大厦,如果没有前期优秀的设计那么肯定难逃豆腐渣工程的命运;也有人认为是重构出来的,软件的一个基本特性就是易变,随着时间的推移软件会不断腐化,因此需要不断重构来保持代码的高质量...首先声明一个 Strategy 基类,在构造函数中传入必要的参数,提供一个 getter 函数,用于计算最佳图片链接。每当有新的域名需要处理,就声明一个类继承 Strategy 基类。...落实到代码中就是,声明一个抽象类,将公共的逻辑都抽到该抽象类中,然后在子类中再实现具体的业务逻辑。 1.2.5 小结 这是一段不算复杂的逻辑,但如何放任不管,代码则会越来越复杂,直至无法维护。...最后是慎重无意的,我们在进行项目开发时,常常一边开发一边学习,你可能需要花一年甚至更长时间才能明白这个系统的最佳实践。...这建议对于绝大多数的人来说是无法接受的,因此我们应该认识到,在当前我们进行我们所认为的最佳实践时,实际上已经在欠下了技术债,这便是慎重无意的技术债。

    25931

    高质量代码究竟依赖设计还是重构而来?

    有人认为是设计出来的,就像一栋稳固的大厦,如果没有前期优秀的设计那么肯定难逃豆腐渣工程的命运;也有人认为是重构出来的,软件的一个基本特性就是易变,随着时间的推移软件会不断腐化,因此需要不断重构来保持代码的高质量...首先声明一个 Strategy 基类,在构造函数中传入必要的参数,提供一个 getter 函数,用于计算最佳图片链接。每当有新的域名需要处理,就声明一个类继承 Strategy 基类。...落实到代码中就是,声明一个抽象类,将公共的逻辑都抽到该抽象类中,然后在子类中再实现具体的业务逻辑。 1.2.5 小结 这是一段不算复杂的逻辑,但如何放任不管,代码则会越来越复杂,直至无法维护。...最后是慎重无意的,我们在进行项目开发时,常常一边开发一边学习,你可能需要花一年甚至更长时间才能明白这个系统的最佳实践。...这建议对于绝大多数的人来说是无法接受的,因此我们应该认识到,在当前我们进行我们所认为的最佳实践时,实际上已经在欠下了技术债,这便是慎重无意的技术债。

    20830

    【译】如何提出好的Code Review反馈

    功能缺陷 逻辑问题 缺少验证(例如边界问题) API的用法 设计模式 架构问题 可测性 可读性 安全问题 命名约定 团队编码规范 文档 使用最佳做法 特定语言的问题 使用过期方法的问题 性能(比如复杂度...超出代码审查范围的反馈是无用的 多数被认为是有价值的反馈都是关注当前范围代码审查。但是,代码审查的范围并不是代码更改文件中可见的代码,也不会超出代码修改的目的。...因此,提出实施范围之外的问题对于大多数开发人员来说是无用的。 替代解决方案。即使替代解决方案被认为是有价值的,但是对当前代码没有明显价值的实现并不能帮助你的团队提升生产效率。 现有技术债务和重构。...但是可能你添加的不仅仅是问题,也许会加一些关于如何改进代码,为什么难以理解代码的反馈等等。 如果你对代码不熟悉怎么办? 如果你之前在工作中没有接触过代码库,你可能很难理解代码审查中的内容。...在一些团队中,代码审查被滥用为权利展示甚至权利争斗的工具。这样的代码审查没有任何帮助。 如果你想要从代码审查中受益,了解如何提出建设性反馈是非常明智的选择。指出一些代码的质量不够高。

    69410

    代码规范&设计模式落地之路

    | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容。 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好的应用到设计模式。...主流的说法,大致如此: 设计模式是解决可在许多不同情况下使用的问题的描述或模板,一般在OOP中最作为最佳实践的解决方案。 最佳实践一词笔者在几处介绍设计模式的地方,都有看到。...但是设计模式真的就是OOP中,业务开发的最佳实践吗?...代码规范性或使用设计模式的痛点 笔者首先复盘了一些在业务开发中为什么不能很好应用设计模式的因素。 性能 在极端的考虑下,例如Java语言,设计模式面临着更多的类文件以及更多的代码。...设计缺陷和过度设计,两者对开发人员都是一样痛苦的,会出现“不该用设计模式而用”,或者单纯为了”迎合缺陷的设计模式”,写出对应逻辑复杂的代码,这样类爆炸不可避免。

    62020

    C# 的封装

    本文将深入探讨C#中的封装,包括它的重要性、实现方式以及最佳实践。1. 封装的概念封装是将数据(属性)和操作数据的方法(行为)捆绑在一起的过程,同时限制对数据的直接访问。...在C#中,封装通常通过类来实现,类中的成员可以是公开的(public)、私有的(private)、受保护的(protected)或者内部的(internal)。2....protected internal:成员可以被定义它的类、派生类或同一程序集中的任何其他代码访问。3.2 使用属性属性是C#中实现封装的一种强大工具。...封装的最佳实践4.1 最小化公开接口尽量只公开必要的接口,隐藏不必要的实现细节。4.2 使用属性而不是公共字段使用属性而不是公共字段来提供对类成员的受控访问。..._hobbies.Contains(hobby)) { _hobbies.Add(hobby); } }}5.2 封装复杂逻辑将复杂的逻辑封装在方法中

    2.3K10

    C++类设计和实现的十大最佳实践

    尽管许多书籍、网络资源、会议演讲者和专家都推荐这种最佳实践,但在很多项目中,这条规则仍然被忽略了,许多类的细节并没有被隐藏。 4. 类越小越好 具有多行代码的类型应该被划分为一组较小的类型。...需要很大的耐心重构一个大的类,甚至可能需要从头重新创建所有东西。以下是一些重构建议: BigClass中的逻辑必须被分成更小的类。...最后,BigClass应该是一个没有自己逻辑的纯接口,可以为了方便将其保留,也可以将其扔掉,并开始只使用新类。 单元测试可以提供帮助: 在提取方法之前为每个方法编写测试,以确保不会破坏功能。 5....也许所面对的类控制了系统中太多的其他类,并且已经超出了应有的逻辑,成为了一个无所不能的类。 6. 加强低耦合 低耦合是理想状态,可以在应用中进行较少的更改实现程序的某个变更。...,也就是说,如果S是T的子类型,那么程序中T类型的对象可以被替换为S类型的对象,而不改变该程序的任何期望属性(例如,正确性)。

    1K10

    PyTorch 最佳实践:模型保存和加载

    在一个粗略的过度简化中,它完全由其 __dict__属性定义, 该属性包含所有("data")成员,其__class__ 属性指向它的类型( 例如,对于 Module 实例,是Module, 而对于 Module...当反序列化模型时(我使用的模型的作者没有遵循最佳实践建议) ,Python 将通过查找 __class__ 的类型并将其与反序列化__dict__组合来构造一个对象。...但是它(正确地)没有做的是调用 __init__ 来设置类(它不应该这样做,尤其是担心在 __init__ 和序列化之间可能已经修改了内容,或者它可能有我们不希望的副作用)。...所以简而言之,这就是为什么在 Python 中序列化 PyTorch 模块或通常意义上的对象是危险的: 你很容易就会得到数据属性和代码不同步的结果。...来注册钩子,这些钩子在状态字典被收集之后和从 state_dict()返回之前被调用。

    1.9K40

    Spring Boot 最佳实践

    我们可以将所有控制器包含在单独的包中,将服务包含在单独的包中,将 util 类包含在单独的包中等等。这种风格在小型微服务中非常方便。 如果我们正在处理庞大的代码库,则可以使用基于功能模块的方法。...我们可以根据我们的要求来决定。 基于类型 基于功能模块 2.使用设计模式 没什么好说的,设计模式已经是现代编程中编写可维护、可扩展代码的最佳实践。...我们可以使用注释进行警告,并解释一些乍一看难以理解的内容。 18.对类、方法、函数、变量和其他属性使用有意义的词语。 这看起来很简单,但影响却是巨大的。...20.简单点 始终尝试编写简单、可读的代码。 同样简单的逻辑可以用不同的方式实现,但是如果不可读或不理解就很难理解。 有时复杂的逻辑会消耗更多的内存。...我将在以后的文章中解释这一点。 21.使用通用的代码格式样式 格式样式因开发人员而异。编码风格的改变也被认为是一种改变,并且会使代码合并变得非常困难。

    19810
    领券