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

修改代码的艺术——如何高效开发、维护和重构复杂的现有系统

反思现在开发的难直到如今,从毕业到现在,我已在软件开发领域从事浸淫了约十多年,负责过开源项目、外包项目、上市企业核心高并发系统研发、高速发展中公司的系统重构、以及创业公司的敏捷开发和快速迭代和救火。...解决之道:高效开发、维护和重构复杂系统的经验分享我时常和团队开会时说,也和不太懂技术的老板说,系统为什么开发了这么多年,现在做个新需求还这么难、这么吃力?...原因是:本身做这个需求不难,但要把这个需求完美嫁接到现有的系统则很难。因为有很多历史包袱、技术债务、旧的问题要处理。当然,办法总比困难多。把问题量化了,自然就会解决之道。...那么解决的办法是什么呢?那就是:自动化单元测试!有没问题,一键测试,就知道。可能你还会问,那单元测试怎么来?谁来写?没有怎么办?我的回答:现在写,你写。现在不补写单元测试,永远都不会有。...我的回答:把本次要新增单元测试的时间也加上。“功在当代,利在未来”。单元测试也是开发工作的一部分,而且也很有价值。

11810

混合云环境的最佳应用程序、工作负载和策略指南

企业在内部部署数据中心的服务器上运行其应用程序、数据和计算功能。一些企业将虚拟化技术用于其IT基础设施,目的是优化内部部署运营环境。...其结果是在过去几年中,应用程序和工作负载已经转移到混合云,结合传统的内部部署、私有云和公共云平台的优势。...一个良好的方法是牢记三个主要的云存储平台作为混合云环境中的选项:传统云、私有云和公共云。哪些应用程序和工作负载属于哪个存储平台?...当应用程序出于各种原因而对计算和存储的要求变化很大时,比如说某个网站只有在特定时期内非常繁忙,那么“云爆发”可能是有意义的。...还有一些企业制定云优先的战略,其目标是在公共云上迁移或创建新的应用程序,直到它们最终可以在内部部署基础设施和/或私有云中停止运行。 总之,在可预见的未来,采用混合云策略对于企业来说是必不可少的措施。

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

    作为一名开发人员,来谈谈微服务架构应用的优势

    你可以自由地使用各种流行的技术 ? 与使用大型、单体架构应用程序相关的一个大问题是,您被自己的技术所束缚。这可以分两个层面来说,第一,更老的或更有说服力的框架更有可能被选择。...我很高兴与microservices一起使用基于Spring和Grails的微服务,使用各自框架的最新版本。可以自由组合所使用的技术栈,这是很令人激动的事。 职责分离 ?...重构、重新运行测试和启动微服务通常比使用单体应用程序进行类似的工作要快得多,这也很有帮助。...我在这里没有提到的事实是,现代微服务框架(如Spring Boot或Grails)专注于减少不必要的配置和样板代码,而这些常常妨碍理解。...有了良好的单元测试、彻底测试的端点和必要的集成测试,就更容易相信系统将按需要运行。 这种分离的另一个好处是,在一个服务中进行的代码更改不会影响其他服务中正在发生的事情。这大大减少了意外错误的几率。

    56020

    没有 NGINX 和 OpenResty 的未来:Cloudflare 工程师正花费大量时间用 Rust 重构现有功能

    编译|核子可乐、Tina 在 Cloudflare 公司,工程师们正在花费大量时间重构或重写现有功能。 当每年处理的流量增长一倍时,原本最优雅的问题解决方案往往会随着工程约束条件的变化而迅速过时。...FL 运行着 Cloudflare 应用程序的大部分逻辑,因此无疑这次替换更具有挑战性。...为了直接与 NGINX 进行交互,其中某些部分(如 cf-html)是用 C 和 C++ 等低级语言编写的。...要想高效处理这些块,就需要加快对各个块的处理和传递速度。在编写用于操作响应的 Rust 模块时,大家往往会想到在链表中采用基于 Rust 的视图。...和 Serde 等高质量库的协助。

    65210

    1. 了解Groovy

    web、GUI、数据库或控制台应用程序时,减少脚手架代码,从而提高开发人员的工作效率 通过支持单元测试和开箱即用的模拟来简化测试 与所有现有Java类和库无缝集成 直接编译为Java字节码,所以您可以在任何可以使用...在本节中,我们将重点介绍几个最知名和最成功的项目,这些项目以Groovy为核心。 Grails :Grails是一个用于JVM的开源、全栈、web应用程序框架。...(Android中依靠它打包编译App) Spock:Spock是Java和Groovy应用程序的测试和规范框架。它之所以能从人群中脱颖而出,是因为它优美而富有表现力的规范语言。...受Grails的启发,Griffon遵循“配置之上的约定”范式,搭配直观的MVC架构和命令行界面。 Geb:Geb是一个功能强大的浏览器功能测试框架,可以让您快速轻松地在Groovy中编写功能测试。...它提供交互式绘图、表格和笔记本式web UI。 Micronaut: Micronaut是一个基于JVM的现代全栈框架,用于构建模块化、易于测试的微服务应用程序。

    1.4K20

    Grails——赋能敏捷开发的利器

    所以Grails可以说是面向Java开发者的快速开发框架。 通常情况下,开发新的应用程序,搭建开发和测试环境都要花不少时间,这也是让人望而却步的重要原因。万事开头难,好的开始已经是成功的一半。...虽然我是做Web应用出身的,但当年的我已经“退出江湖”多年,对于很多的新的技术和框架已经脱节,而通过Grails,我可以在不需要懂这些技术和框架的情况下就运用到它们。...当然,任何事情都有两面,要发挥Grails的优势,你最好遵循Grails的方式来进行开发,但是随着业务越来越复杂,它也会不可避免地出现敏捷性和性能下降的情况,甚至到某个发展阶段要进行重构或重写,这是所有应用的宿命...近年流行的Spring Boot和Grails的比较是,Spring Boot只包含Controller和API,没有UI,适合做微服务应用,Grails适合包含前端到后端的全栈单体应用。...我相信Spring Boot吸收了不少Grails的思想,实现了开箱即用,而现在新版Grails反过来把Spring Boot作为底层框架之一进行了重构。

    1.9K50

    安全保护策略:iOS应用程序代码保护的关键步骤和技巧

    ​ ​编辑 在当今移动应用市场竞争激烈的环境中,代码保护功能对于iOS应用程序的成功非常关键。代码保护可以帮助开发者防范盗用、逆向工程和未授权访问等风险。...通过使用代码混淆工具,你可以混淆你的iOS应用程序代码,使其更加难以被破解和逆向分析。 实施加密措施:加密是保护代码安全性的重要手段。...引入运行时保护机制:运行时保护技术可以在应用程序执行过程中检测和防止恶意代码注入、动态调试和内存破坏等攻击。通过使用运行时保护机制,你可以增加应用程序的安全性,防止黑客对代码进行篡改和攻击。...更新及时修复漏洞:及时更新和修复应用程序中的漏洞非常重要。持续关注最新的安全漏洞和修复方案,并及时对应用程序进行修复和升级,以提高应用程序的安全性。...这可以黑客获取应用程序的代码,也会很难理解它,不管他是高端还是低端的黑客,目前都没有有效的方法来还原为原来的代码,是公认的非常有效的方法之一。

    25460

    RAG应用程序的12种调优策略:使用“超参数”和策略优化来提高检索性能

    与本文还将介绍可以应用的不同策略,这些策略虽然不是超参数,但对性能也会产生很大的影响。 本文将介绍以下索引阶段的“超参数”。...数据清理 分块 嵌入模型 元数据 多索引 索引算法 在推理阶段(检索和生成),可以通过一下策略进行调优: 查询转换 检索参数 高级检索策略 评估模型 llm 提示工程 注意,本文涵盖了RAG的文本用例。...对于多模式RAG应用程序,可能需要考虑不同的因素。 数据索引 数据的索引摄取阶段是构建RAG管道的准备步骤,类似于ML管道中的数据清理和预处理步骤。...本节主要讨论改进检索的策略(查询转换、检索参数、高级检索策略和重新排序模型),因为这是两者中更有影响力的组件。同时也简要地探讨了提高生成的一些策略(LLM和提示工程)。...检索参数:搜索技术的选择(如果启用了混合搜索,则为alpha)和检索的搜索结果的数量。 高级检索策略:是否使用高级检索策略,如句子窗口或自动合并检索。

    2.2K30

    简洁、高效、灵活:探索 Spring 同级别的编程框架

    Grails Grails是一个基于Groovy语言的构建在Spring Boot之上的强大的面向JVM的Web应用框架。...像Rails和Django这样的动态框架为更现代的Web应用程序思维方式铺平了道路。Grails建立在这些概念之上,大大降低了在Java平台上构建Web应用程序的复杂性。...,支持 RxJava、GPars 等 Micronaut Micronaut由Grails框架的创建者开发,并从多年来使用Spring、Spring Boot和Grails构建从单体到微服务的实际应用程序中汲取灵感...、Spring Boot和Grails等框架的缺点: 更快的启动时间 降低内存占用 最少使用反射 最少使用代理 易于单元测试 不生成运行时字节码 这是通过在编译时预先计算框架基础结构来实现的,这减少了应用程序工作所需的运行时逻辑...它支持配置文件集中管理、应用程序监控、异常处理和日志记录等功能,帮助开发者更好地维护和管理应用程序。 这些框架在不同的场景和需求下具有各自的优势和特点,感兴趣的可以自行学习一下。

    85350

    Groovy on Grails 交流活动

    “Grails 需要它特有的运行环境。” 不!你只需要使用 “grails war” 命令将应用打包成一个 WAR 文件,并将其部署到你最喜欢的应用程序容器中即可。...(注:看起来我是有些过于喜形于色和小孩子气了,其实我不是这样的。) “Grails 只适用于常规的增删改应用程序。”...接下去,当然,如果你愿意的话,你可以生成个性化的控制器和视图代码。 “Grails 和其它框架一样,最终总有局限性。”...所有的 Grails 应用程序都有一个 Spring bean 上下文,你可以自由添加任意 Java bean 进去,并在你的应用程序中访问它们。...这将有效地形成一系列的 “TCK” 以确保 Grails 在 1.0 基础上的稳定性,此外,一组大量的 Grails 单元测试为持续整合平台的构建而稳定执行。

    1.7K20

    在你的浏览器中构建和共享开发人员环境

    你可以使用便宜的笔记本电脑来编译和运行需要JDK 7,Maven和Mongo的复杂Java项目,来访问开发运行日志或查看正在运行的应用程序。...添加了附加源代码后,你可以执行grails命令,打包应用程序并使用servlet容器部署工件(你可以下载Tomcat或使用我们的基本映像中最常用的servlet容器安装)。这很简单。...你可以为相同的应用程序创建多个配置,例如一个用于编译和运行,另一个用于PaaS部署。是的,自定义的运行时系统可以充当应用程序的部署环境。...你只需安装所选的PaaS提供方的CLI或SDK,并使用CLI命令部署应用程序。 Docker使Codenvy运行变得灵活,并且移除了和运行“内容”与特性有关的所有限制。缺少PHP模块吗?...这个项目的源文件可以编辑,并且该项目也可以编译和运行。用户也可以使用环境,即编辑现有的Docker文件或创建自己的Docker文件。

    4.5K90

    该如何接手别人遗留下的代码?

    不做单元测试 请注意,我们一直在讨论集成测试,而不是单元测试。这有一个很好的理由:对于遗留系统的大规模重构,当你刚开始重构时单元模块会发生很大的变化,但集中在静态接口上的集成测试则不会。...你想花时间重构你的应用程序,而不是你的测试,所以在你稳定代码内部工作之前,单元测试可能会分散你的注意力。集成测试的优势在于,你可以一次覆盖大部分代码,如果正确完成,可以非常快速地编写。...此外,对于结构不良的应用程序,单元测试可能很难执行。集成测试还有助于发现单元测试无法发现的错误:不同组件具有不同期望的错误。...不要把这个责任交给现有的程序员,除非你绝对相信他们拥有完成这项工作所需的技能和经验。 接下来就是重复这些方法,在最坏的情况下可能需要数年才能完成。...总结 上述策略并不能得到所有人的认可,对于那些崇尚新事物的人来说很难接受。事实上,在许多方面它可以被视为无聊(虽然我喜欢重构代码),但我已经成功地在多个遗留代码库中使用了这种方法。

    58630

    Java 近期新闻:Gradle 8.0、Maven、Payara 平台、Piranha、Spring Framework

    -orm6 制品升级到 Hibernate ORM 6.2.0.CR2;更简单的 and/or/not 断言(predicate);针对多租户的大规模索引;以及在 outbox-polling 协调策略中...Apache 软件基金会 MyFaces Core 4.0.0 的第五个候选版本发布,它是 Jakarta Faces 规范的兼容实现,其特性包括:集成了 jsf.js 的下一代脚本;将所有单元测试迁移到...Grails Grails 的 5.3.2 和 5.3.1 版本发布,由于 org.apache.maven:maven-resolver-provider 从 3.8.3 版本升级到 3.9.0 版本的....x;在 Observation 接口中添加了一个新方法,observe(Function function),以补充现有的 observe...Maven Maven 3.9.0发布,新特性包括:名为 MAVEN_ARGS 的新环境变量;允许在多个本地仓库中构建应用程序;能够在独立的本地仓库中存储快照;提供已废弃 Mojo 插件相关的警告;简化了

    1.7K30

    老旧系统改造要点

    高 持续时间 数月 数月到 1 年 数月到数年 长期收益 低 高 最高 人生度 最高 高 低 人力成本 低 中 高 迁移策略 在我们决定好了迁移的目标和模式之后,只需要适合的方式即可: 保留(Retain...架构重构(Re-Architect),更改应用程序的架构和开发方式,往往通过使用云原生功能来完成的。 这里,我们主要考虑讨论的是:重新托管、平台更新、架构重构,因为只有这三项是技术活动。...…… 而在这其中除了架构的设计,最复杂的一部分莫过于:防护网的设计。 自动化测试 适用的场景:遗留代码、遗留系统、 遗留架构。 对应的实施方式: 代码级重构。 组件级重构。 API 级重构。...常见的防护措施有: 单元测试。针对于包级、组件、函数级的代码重构场景。 容器内测试。针对于模块化的 OSGI 架构应用。 API 测试。采用纺锥型测试策略进行系统迁移。 端对到端测试。...确保数据模型或架构结构在源系统和目标系统之间匹配。 Row 计数比对。确保计数是针对源和目标之间的表是否匹配。 数据汇总测试。对源和目标之间的大量表执行汇总检查。 制品比对测试。

    74910

    组件测试:改建遗留系统的起点 | 洞见

    一般来说,改建遗留系统通常会先对其添加必要的测试,再开展重构和重新设计等一系列工序,从而提升其内建质量。 Martin Fowler 在微服务的测试策略的分享中,详细讨论了各种测试方法及其适用场景。...实践中,为遗留系统添加单元测试和端到端的界面测试都会遇到其对应的困难,而我们发现组件测试却能由于其关注行为的特点在单元测试和端到端测试之间取得平衡,对于改建遗留系统来说,它提供了一个不错的起点。...---- 避开单元测试实践的被动 遗留系统从最初发布到现在,早已过去多年,当初的开发人员早已离开,徒留一段代码给后来者。在遗留系统上的工作通常要求不能破坏现有其他功能,只能按要求“恰好”地修改。...在这种背景之下,即使为系统添加了单元测试,接下来的重构又会使得细粒度的单元测试成为一种浪费——重构势必要修改代码设计,导致单元测试也需要跟着一起修改。...---- 绕过端到端界面测试的窘境 在改建遗留系统开展的实践中,不少团队为了摆脱单元测试的被动局面,尝试过为其添加端到端界面自动化测试的策略。这样几乎可以完全忽略代码细节,而直接关注业务场景。

    52030

    「首席架构师看敏捷数据」数据库重构:适应业务快速变化

    是的,您可能需要重构现有代码才能添加新功能。是的,稍后您可能会发现需要重构刚刚添加的新代码。要点是重构和添加新功能是两个不同但互补的任务。...我喜欢将数据库重构视为一个三步过程: 从您的开发沙箱开始 在集成沙箱中实现 安装到生产中 4.1第1步:在您的开发沙箱中开始 您的开发沙箱是一个技术环境,您的软件(包括应用程序代码和数据库模式)是开发和单元测试的...如图3所示,Agile DBA和应用程序开发人员通常会通过以下部分或全部步骤来实现重构: 验证是否需要重构数据库 选择最合适的数据库重构 弃用原始架构 写单元测试 修改数据库架构 迁移源数据 更新外部访问程序...这是我的建议: 您的主要目标是确保测试存在。 您应该尝试在应用程序级别或数据库级别执行一次每个测试,但不能同时执行两者。 一些单元测试将在应用程序级别,一些在数据库级别,这没关系。...您的数据质量问题并没有自行创建,也无法自行修复。人们创造了问题,人们需要解决问题。数据库重构是您可以从数据技术债务中挖掘出来的最安全,最直接的策略。 采用100%数据库回归测试策略。

    1K20

    「首席架构看领域驱动设计」领域驱动的设计和开发最佳实践

    其他支持DDD实现的框架有JMatter、Naked Objects、Ruby On Rails、Grails和Spring Modules XT框架。...结合使用重构、CI和单元测试来确保代码更改不会破坏任何功能,同时这些更改确实有助于预期的代码或性能改进。 自动化测试在重构应用程序代码中起着至关重要的作用。...单元测试/持续集成 我们前面谈到的目标之一是,域类应该是单元可测试的(在初始开发期间以及稍后重构现有代码时),而不需要对容器或其他基础结构代码有太多依赖。...等),编译域类(以及其他类的应用程序),如果没有构建错误,然后自动运行所有的测试(单元测试和集成)。...如果为了向后兼容而必须支持某些域对象的现有版本和新版本,我们还可以部署同一个域类的两个不同版本。

    1.6K30

    在您的浏览器中构建和共享开发者环境

    您可以使用一台便宜的笔记本电脑来构建和运行依赖JDK 7,Maven和Mongo的复杂Java项目,访问构建和运行日志或是查看正在运行的应用程序。...user/.bashrc ENV PATH $GRAILS_HOME/bin:$PATH RUN echo "export PATH=$PATH" >> /home/user/.bashrc #将您的应用程序源添加到...添加了添加源代码后,您可以执行grails命令,打包您的应用程序并使用servlet容器部署开发(您可以下载Tomcat,或使用我们最受欢迎的预装servlet容器的基本镜像)。就是那么简单。...您只需安装所选PaaS提供程序的CLI或SDK,就可使用CLI命令部署应用程序。 Docker使Codenvy的使用者更灵活,并且移除了关于使用者的工作性质和“内容”的所有限制。缺少PHP模块?...用户也可以更改环境,即编辑现有的Docker文件或创建自己的配置。原来的项目和工作空间依然不会受到影响,而临时工作空间在几个小时内就被销毁了。

    1.9K70

    在云原生应用程序体系结构中需要重塑策略和授权的三种趋势

    应用程序开发市场正在转向容器化的“云原生”应用程序架构,而不是单片应用程序。现在也是制定政策和授权的时候了,以提供所有现代安全策略的基础。...当基础设施本身(应用程序组件)由策略控制和管理时,它们只能做正确的事情。企业的最佳实践无法再适应这些新环境的速度和广度。只有在环境本身中执行的自动化策略才能真正降低操作、安全和法规遵从性风险。...这样的策略不能应用于应用程序的外部;也不应该硬编码为不同的应用程序组件本身。与其相反,它们必须在应用程序基础结构中应用,使用公共框架和语言,与服务分离,但必须集成且足够接近才能有效并满足性能要求。...以下是导致出现这一拐点的三个宏观趋势: (1)开源和微服务改变了应用程序开发 正如计算、网络、存储和监控必须发展以适应现代应用程序的需求一样,策略和授权服务也必须发展。...开源社区正在响应云原生应用程序体系结构中策略和授权的趋势,并采取措施使企业和消费者的部署更加安全。

    81310

    是时候彻底放弃“高分低能”的 Leetcode了:AI 时代的面试需要大变革!

    这种方式更适合评估那些负责理解代码、而非直接编写代码的技术角色,包括工程经理、架构师和技术支持人员等。 这种方式能更好地反映受试者在初入团队后的表现:通过阅读代码来学习现有系统。...具体策略 在代码审查中,我们还可以将以下几种策略搭配起来,借此衡量受试者的实际水平。这些策略的共同点在于,都更强调代码审查能力、而非代码编写能力。...重构与重新设计 可能公司刚刚对某些代码进行了重构,或者正打算进行重构,这时候就可以将重构前的代码作为素材,考察受试者如何看待原有代码、打算用什么策略规划和实施重构。...具体包括应用程序所需执行的现有 SQL DDL 架构及常见自然语言查询。或者删除索引定义,看看受试者能否提出索引或替代设计来提高性能。...在即将到来的 AI 生成代码时代,这种判断力往往更加重要:理解领域空间和用例,以及如何编写高覆盖率单元测试(或者评估 AI 生成的单元测试的完整性)将成为一项关键技能。

    52410
    领券