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

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

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

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

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

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

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

相关·内容

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

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

3.5K40
  • 无用设计模式-上篇

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

    51620

    专访企业架构学者Svyatoslav Kotusev

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

    23720

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

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

    68144

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

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

    3.1K30

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

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

    43230

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

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

    61610

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

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

    20410

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

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

    2.1K31

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

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

    24731

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

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

    20830

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

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

    61720

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

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

    68410

    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 封装复杂逻辑复杂逻辑封装在方法

    78310

    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

    代码规范&设计模式落地实践分享!

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

    87440

    Spring Boot 最佳实践

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

    19210

    Spring Boot 最佳实践

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

    23840
    领券