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

一周技术思考(第22期)-编程的基本礼节

Bug喜欢出现在复杂的地方。 如果软件代码出现线上问题,经验告诉我们这些问题常常会集中在某一个区域,这些区域都有一个共同的特点,那就是复杂。 编写代码时如果追求简单易懂,代码就很难出现问题。...到这里相信你已经对什么是可读性的代码有来自己一定的理解。 接下来,为了让大家的可读性理解印象更深刻,我们再”加点料“,我为大家准备来下面这两段关于if嵌套代码例子。 ? 代码段4 ?...那代码如果要有”型“应该锻炼哪些“意识部位”呢,我个人认为在面向对象编程领域里,有基本的三个“部位”是一定要锻炼的,那就是封装、继承和多态。 为了练好面向对象编程的这些模块,我们有什么动作呢。...抽象 封装 信息隐藏 打包 关注点分离 充足性、完整性、原始性 策略和实现的分离 接口与实现的分离 单一引用点 分治 正如我健身的时候,为了有效锻炼,我肯定要选择更有效的动作,来达到体型的锻炼,面向对象编程我们也会有被人们使广泛的动作...以关注点为单位创建的模块,会要求我们把不同的和不相关的代码以及功能分开,比如这个MVC的模式。 如果一个模块在不同前提下有不同的功能,我们就需要分割模块,让各个模块处于独立的状态。

26220

聊聊 ASP.NET 6 整洁架构开发模板

DDD的分层架构就有好多种,例如整洁架构、CQRS和六边形架构等等,每种架构模式虽然提出的时代和背景不同,但其核心理念都是为了设计出“高内聚低耦合”的架构,从而能够实现架构的演进。...领域层主要体现领域模型的业务能力,它用来表达业务概念、业务状态和业务规则。领域层包含:聚合根、实体、值对象、领域服务等领域模型中的领域对象。对于领域层,领域模型的业务逻辑主要由实体和领域服务来实现。...对于实体,一般建议采用充血模型来实现所有与之相关的业务功能。对于领域服务,一般当单个实体不能实现某些功能时,领域服务才会出马,组合聚合内的多个实体来实现复杂的业务逻辑。...下图中展示了传统的三层架构与DDD四层架构的对应关系: 整洁架构简单介绍 简而言之,整洁架构是组织软件体系结构的原则,可以轻松面对未来的不确定性,方便代码的重构。...同时,它可以帮助我们为特定的领域模型构建服务,从而为将来可能的微服务体系结构做好准备。

32150
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    713 事故之后,B站又崩了...

    出品 | OSC开源社区(ID:oschina2013) 2023 年 3 月 5 日晚 20:20 左右,许多网友表示在使用 B 站时,手机和电脑端都无法访问视频详情页,且手机端无法查看收藏夹与历史记录...基于报警内容,SRE 第一时间怀疑机房、网络、四层 LB、七层 SLB 等基础设施出现问题。 update:本文发出时,B 站已逐步恢复正常。不知道这次的原因是什么,大家也可以一起留言区猜猜。...同时,一起期待一下这次的复盘,一起学习一下! ------ 我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。...另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取! 推荐阅读 代码越“整洁”,性能越“拉胯”?...一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。

    59610

    当我们谈论DDD时我们在谈论什么

    DDD战略设计 在这个范畴里,主要讨论目标是复杂的业务需求。有多复杂呢?可能需要多个团队分工合作,或者一个团队分阶段开发,需要被设计成多个独立部署运行的服务,会有多个代码库。...不好的划分方法可能会导致分布式单体:每次变化不得不修改多个服务、每次部署必须同时部署多个服务,服务之间有非常多的通信,同一个团队管理着多个服务,服务之间共享数据库、同样的代码和模型。...图片引自《整洁架构》 整洁架构也用「用例」来描述业务实体之外的一层,对应于「应用层」,更明确的指明了这层的职责是实现各个用例。 比较有趣的是,整洁架构把Gateway接口放到了领域层之外的「用例层」。...我们以关注点分离的角度,来解析这些模式。 领域对象的生命周期类型 从生命周期的角度,「领域对象」分为这样几个类型: 和应用生命周期一致,应用启动时被创建出来,应用关闭时才销毁。...” ——《领域驱动设计》 5.3 值对象 分离领域对象的创建、查询、保存和使用 从生命周期角度,对于这三类领域对象的创建逻辑,可以使用Factory模式,将其封装在Factory中。

    25420

    一个适用于 .NET 的开源整洁架构项目模板

    项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以提高软件的可维护性、可扩展性、可重用性和可测试性。...Martin)提出,它旨在使软件系统更加灵活、可维护和可测试,其核心目标是构建一种简洁、灵活且易于维护的系统结构。 分层职责 实体层(Entities):实体层代表了系统中的核心业务概念和对象。...这一层包含了那些在整个系统的生命周期中持续存在且具有明确业务含义的实体。 用例层(Use Cases):用例层包含了系统的具体业务逻辑和用例。它协调实体层和其他层之间的交互,以实现特定的业务功能。...项目源代码 环境准备 .NET 9.0 SDK https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0 Node.js https://nodejs.org...dotnet new install Clean.Architecture.Solution.Template::9.0.8 整洁架构模板安装后,使用模板创建新的解决方案。

    6110

    优秀程序员眼中的整洁代码

    被浪费掉的运算周期并不雅观,并不令人愉悦。留意 Bjarne 怎么描述那种不雅观的结果。他用了 “引诱” 这个词。诚哉斯言。糟糕的代码引发混乱!别人修改糟糕的代码时,往往会越改越烂。...我也会检查对象或方法是否想做的事太多。如果对象功能太多,最好是切分为两个或多个对象。...消除重复和提高表达力让我在整洁代码方面获益良多,只要铭记这两点,改进脏代码时就会大有不同。不过,我时常关注的另一规则就不太好解释了。 这么多年下来,我发现所有程序都由极为相似的元素构成。...另外,该集合抽象常常提醒我留意 “真正” 在发生的事,避免随意实现集合行为,因为我真正需要的不过是某种简单的查找手段。 减少重复代码,提高表达力,提早构建简单抽象。这就是我写整洁代码的方法。...每个模块都为下一个模块做好准备。每个模块都告诉你下一个模块会是怎样的。整洁的程序好到你根本不会注意到它。设计者把它做得像一切其他设计般简单。 那 Ward 有关 “美” 的说法又如何呢?

    64770

    Go 语言中怎么使用依赖注入?

    我准备以 clean arch 架构的代码讲解。 推荐读者朋友们先阅读我之前写的一遍文章 「Go 语言整洁架构实践」。...所以,我们使用 Usecase 层的构造函数 NewTodoListUsecase 创建 Usecase 对象时,需要先使用 Repository 层的构造函数 NewMysqlTodoListRepository...创建 Repository 对象,并将其以参数的形式传递给 Usecase 层的构造函数 NewTodoListUsecase。...Google 开源的依赖注入工具 Wire[1],它是一个代码生成工具,也就是说它是在编译时自动生成代码。...读者朋友们可以根据实际开发中的需求,选择合适的工具。 04 总结 读者朋友们可能已经发现,依赖注入实际上就是面向对象五大原则之一,依赖倒置原则的实现方式。

    14110

    写Python需要养成的9个编程好习惯

    思考业务逻辑和代码流程,是动手前的准备工作,这上面可以花一半以上时间。 一些程序员洋洋洒洒写了几万行,删删改改,bug很多,误以为自己很忙。这都是思考不足的结果,导致时效很低。...这些字符串可以通过对象的__doc__成员被自动提取, 并且被pydoc所用 当然如果你足够优秀,也可以让代码自己解释自己。 ❝代码的注释不是越详细越好。...保持代码美观 Python强制缩进,所以代码整洁度上有保障,但我们也要注意细节。 《代码整洁之道》里面说,整洁的代码是只做好一件事,这里尤其指函数。 Python之禅可以很好地解释什么是美观地代码。...README作用主要有告诉人们为什么应该使用你的项目,以及如何安装和使用,一份标准化的README可以简化它的创建和维护,所以README值得你花时间去创建。...模块化 模块化就是将繁杂冗长的代码按照一定的规则规范分成多个块(可以是面向对象的方式)或者文件,然后再进行组合实现想要的功能和结果。

    33420

    一个适用于 .NET 的开源整洁架构项目模板

    前言 项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以提高软件的可维护性、可扩展性、可重用性和可测试性。...Martin)提出,它旨在使软件系统更加灵活、可维护和可测试,其核心目标是构建一种简洁、灵活且易于维护的系统结构。 分层职责 实体层(Entities):实体层代表了系统中的核心业务概念和对象。...这一层包含了那些在整个系统的生命周期中持续存在且具有明确业务含义的实体。 用例层(Use Cases):用例层包含了系统的具体业务逻辑和用例。它协调实体层和其他层之间的交互,以实现特定的业务功能。...项目源代码 环境准备 .NET 9.0 SDK https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0 Node.js https://nodejs.org...dotnet new install Clean.Architecture.Solution.Template::9.0.8 整洁架构模板安装后,使用模板创建新的解决方案。

    9610

    每个程序员都该知道的 5 个定律

    编译:伯乐在线/孙腾浩,英文:Raphael Brugier 定律或称法则,可以指导我们并让我们在同伴的错误中学习。 这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的 5 个定律。...最开始使用简单的解决方案也让后期性能出现问题时更容易迭代和改进。 垃圾自动回收的编程语言中,字符串的连接常常是过早优化的例子。...在 Java 或 C# 中,String 对象是不可变的,我们学会使用其他结构动态创建字符串,比如 StringBuilder。...但事实上直到你分析完个应用程序前,你并不知道 String 对象创建了多少次并对性能的产生多大影响。所以首先编写尽可能整洁的代码,之后在必须的时候再优化,往往这样做更有意义。...这条语录强调无论你做的选择是什么,你总会放弃一个或多个选项 但这不是最重要的。 最重要的是理智地做出决定,了解其他选项,清楚你为什么不选择它们。你要始终根据当前你掌握的信息来权衡并做出决定。

    55280

    每个程序员都该知道的 5 个定律 转

    定律或称法则,可以指导我们并让我们在同伴的错误中学习。 这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的 5 个定律。其中有些和开发有关,有些和系统组织有关。...最开始使用简单的解决方案也让后期性能出现问题时更容易迭代和改进。 垃圾自动回收的编程语言中,字符串的连接常常是过早优化的例子。...在 Java 或 C# 中,String 对象是不可变的,我们学会使用其他结构动态创建字符串,比如 StringBuilder。...但事实上直到你分析完个应用程序前,你并不知道 String 对象创建了多少次并对性能的产生多大影响。所以首先编写尽可能整洁的代码,之后在必须的时候再优化,往往这样做更有意义。...这条语录强调无论你做的选择是什么,你总会放弃一个或多个选项 但这不是最重要的。 最重要的是理智地做出决定,了解其他选项,清楚你为什么不选择它们。你要始终根据当前你掌握的信息来权衡并做出决定。

    21420

    React 设计模式 0x2:整洁和可维护的代码

    学习如何轻松构建可伸缩的 React 应用程序:整洁和可维护的代码 # 为什么要编写整洁的代码 编写干净的代码对于编程非常必要,有以下几点好处: 业务连续性 业务连续性在每个组织中都非常重要,因为当开发人员离开公司或企业时...、添加功能和支持应用程序 确保在您离开公司之后,没有人会联系您作为开发人员,询问您写了什么或理解您的逻辑做了什么 # 如何实现整洁的代码 如何实现整洁代码: 保持简单(KISS,Keep It Simple..., Stupid) 保持代码简单,不要过度设计 不要为了标准而使事情变得复杂 一次且仅一次(DRY,Don't Repeat Yourself) 在应用程序中多个地方重复相同的逻辑会导致多个冗余的代码...代码应该易于阅读和理解,而无需进行太多的调试 避免在函数中使用太多参数 大多数函数/方法都需要一个或多个参数,这些参数应该保持在三个参数以内 如果参数超过 3 个,请使该方法接收一个对象,然后在方法中解构该对象以供使用...,但请记住,每个函数都应该只做一件事情 将函数保持短小精悍 将函数保持短小精悍是实现清晰代码的一种方式 当函数变得非常大时,阅读起来就会变得困难,请尽量将它们保持非常短小,最多 50-60 行 在从主分支拆除分支时给分支有意义命名

    38810

    代码越“整洁”,性能越“拉胯”?

    整理和归纳“整洁”的代码规则,并提取实际影响代码结构的规则,我们将得到: 使用多态代替“if/else”和“switch”; 代码不应该知道使用对象的内部结构; 严格控制函数的规模; 函数应该只做一件事...这些规则非常具体地说明了为了保持代码“整洁”,我们应该如何书写特定的代码片段。然而,我的疑问在于,如果创建一段遵循这些规则的代码,它的性能如何?...另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取! 违反“代码整洁之道”的第一条规则后 那么,如果我们违反第一条规则,会怎么样?...当你尝试将代码整洁之道扩展到具有许多属性的对象时,代码的性能普遍会遭受损失。 使用代码整洁之道的次数越多,编译器就越不清楚你在干什么。一切都在单独的翻译单元中,在虚函数调用的后面。...另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取! “遵循整洁代码的规则,你的代码运行速度会降低15倍。”

    30630

    代码整洁之道【笔记】

    .数据抽象 1.隐藏实现关乎抽象,类并不简单地用取值器和赋值器将其变量推向外部,而是曝露抽象接口,以便用户无需了解数据的实现就能操作数据本体 B.数据、对象的反对称性 1.对象把数据隐藏于抽象之后,曝露操作数据的函数...你应当尝试将这些变量和方法分拆到两个或多个类中,让新的类更为内聚 8.将大函数拆为许多小函数,往往也是将类拆分为多个小类的时机 C.为了修改而组织 1.在整洁的系统中,我们对类加以组织,以降低修改的风险...3.将构造与使用分开的方法之一是将全部构造过程搬迁到main或被称为main的模块中,设计系统的其余部分时,假设所有对象都已正确构造和设置 4.可以使用抽象工厂模式让应用自行控制何时创建对象,但构造的细节却隔离于应用程序代码之外...测试驱动开发、重构以及它们打造出的整洁代码,在代码层面保证了这个过程的实现 2.软件系统与物理系统可以类比。...由于竞步的原因,线程会持续尝试起步,但在很长时间内却无法如愿,甚至永远无法启动 2.生产者-消费者模型:一个或多个生产者线程创建某些工作,并置于缓存或队列中。

    99630

    JavaScript 测试教程 part 1:用 Jest 进行单元测试

    首先,我将介绍单元测试的基础知识,即测试应用程序的每个部分并检查它们是否适合使用。为此我们将使用 Facebook 开发的测试框架 Jest。它已经准备就绪,并具有进行测试所需的功能。...测试的类型 测试是用来检查你代码的代码。测试会使你对自己的程序更有信心。它们还能够防止你在修复一个 bug 时生成另一个 bug。...分组测试 每个文件通常会有一个以上的测试。使用 Jest,你可以使用 describe 函数对它们进行分组。它创建了一个可以合并多个测试的块。...它是常用的别名。运行 it === test 会返回 true。 像这样对测试进行分组可以使代码更整洁。你应该关心程序代码和对其进行测试的代码的质量。...如果出现问题,除了使代码更具可读性之外,它还有助于提供更友好的错误消息。

    2.9K20

    敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin

    当时的工作是划分白班和夜班的,白班时,程序员先用铅笔把代码写在编码表格上,然后用打孔机在卡片上打孔,把仔细检查过的卡片交给计算机操作员,操作员则在夜班时进行编译和测试。...意识到代码整洁的重要性之后,Bob 心想,如果把瀑布模型与代码整洁结合在一起,那一定很完美。于是,在接下来很长的一段时间里,他同团队一起努力按照“ 分析—设计—编程”的方式试图实现产品交付。...这才发现,原来在面向对象的环境中可以应用这样的流程,原来一套可以信任的测试能够使代码修改变得异常简单。当他觉得团队完全可以在开发流程中,简单并安全地修整代码的时候,就无法再接受烂代码了。...受此启发,Bob 想围绕代码整洁和极限编程创建一个非营利组织,但这一想法在当时并未得到大多数人的认可。...“代码整洁”认为,整洁的代码是自解释的,阅读代码应该如同阅读一篇优秀的文章,见字知意,能够一下子明白大概的代码功能。代码首先要能读懂,其次才去要求功能实现,这一理念得到了数百万程序员的追捧。

    81920

    最受程序员欢迎的 20 本书!

    个模式都提供使用和实现信息,以及Java或C#中的详细代码示例。整本书还用UML图进行了丰富的说明,以进一步解释这些概念。...它使用了一种实用的解决方法,展示了如何开发一个面向对象的应用程序,从分析的早期阶段,到设计到最后的实现。 6、《算法导论(第3版)》 17.4%的人推荐 ?...全书从管理人力资源、创建健康的办公环境、雇用并留用正确的人、高效团队形成、改造企业文化和快乐工作等多个角度阐释了如何思考和管理软件开发的最大问题——人(而不是技术),以得到高效的项目和团队。...20、《代码整洁之道》 52.2%的人推荐 ? 本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。...作为编程领域的佼佼者,作者给出了一系列行之有效的整洁代码操作实践。这些实践在《代码整洁之道(英文版)》中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。

    1.2K60

    微服务的常见架构方式

    但应用层又位于领域层之上,因为领域层包含多个聚合,所以它可以协调多个聚合的服务和领域对象完成服务编排和组合,协作完成业务操作。...其次,你要知道,实体和领域对象在实现业务逻辑上不是同级的,当领域中的某些功能,单一实体(或者值对象)不能实现时,领域服务就会出马,它可以组合聚合内的多个实体(或者值对象),实现复杂的业务逻辑。...整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越低,代码级别越高,越是核心能力。外圆代码依赖只能指向内圆,内圆不需要知道外圆的任何情况。...领域模型的主体是实体,一个实体可以是一个带方法的对象,也可以是一个数据结构和方法集合。 领域服务实现涉及多个实体的复杂业务逻辑。...它解决了业务逻辑与用户界面的代码交错问题,很好地实现了前后端分离。六边形架构各层的依赖关系与整洁架构一样,都是由外向内依赖。

    1.8K10

    40+个对初学者非常有用的PHP技巧(二)

    12.从php echo javascript代码时使用json_encode 有些时候一些JavaScript代码是从php动态生成的。 ? 放聪明点。使用json_encode: ?...通过这样做,你就能得到哪里文件写入失败以及为什么失败的准确信息。 14.改变应用程序创建的文件的权限 当在Linux环境下工作时,权限处理会浪费你很多时间。...但它可以使用array_map变得更整洁: ? 这适用于trim数组$arr的所有元素。另一个类似的函数是array_walk。...当导入csv文件或导出表到csv文件时,上面这样的代码很常见。 像上面这样做可能经常会由于内存限制而让脚本崩溃。对于小规模的变量它不会出现问题,但当处理大型数组时一定要对此加以避免。...有多个连接也不好,会因为每个连接都需要时间来创建和使用更多的内存,而导致执行减缓。 在特殊情况下。例如数据库连接,可以使用单例模式。

    1.1K10

    浅谈设计模式 - 单例模式(一)

    饿汉式 解释:和名字一般,很饿,所以在使用之前就做好了准备 优点: 保证单例对象不会重复 永远不会有重复创建的隐患 缺点: 如果对象较大比较占用jvm内存空间 影响性能,带来没有必要的对象创建。...public static LazyVersion1 getInstance() { if (lazyVersion1 == null) { // 验证是否创建多个对象...; 静态代码块 和饿汉式差不多,这里不在过多赘述,直接上代码: 实现代码: /** * 静态代码块的形式,实现单例 * * @Author zhaoxudong * @Date 2020/10...: 解释:序列化和反序列化的情况下,会出现问题,因为JAVA的序列化从磁盘读取的时候,会生成新的实例对象,但是这样就会违背单例模式的方式 实现代码: package com.zxd.interview.desginpattern.single...序列化对象的引用类型成员变量,也必须是可序列化的,否则,会报错。 反序列化时必须有序列化对象的class文件。 当通过文件、网络来读取序列化后的对象时,必须按照实际写入的顺序读取。

    60820
    领券