如何消除代码混乱中庞大的参数列表?

发布于:2024-10-24 编辑:匿名 来源:网络

如何消除代码中庞大的参数列表?有经验的程序员应该都知道,一个方法有几十个、几百个参数。 1 为什么方法有参数?因为信息需要在不同的方法之间共享。

但方法之间共享信息的方式不仅仅是参数列表,还包括全局变量。但全局变量总能带来意想不到的惊喜,因此取消全局变量也是一大语言趋势。

所以参数列表就成了唯一的选择。所以,只要想到有什么信息要传递给一个方法,就会直接添加到参数列表中,导致参数列表越来越长! 2 参数列表太长怎么办?一旦参数列表太长,粗孩子就很难完全掌控逻辑了!所以问题的关键是数量多,解决的关键是减少参数的数量。

3 解决方案 3.1 一个简单的创建博客的方法: 代码语言:javascript copy public void createActicle(final String title, Final String opening, Final URL coverUrl, Final ActicleType type, Final ActicleColumn column, Final String protagonists, Final String Tags, Final boolean已完成) { ... Acticle acticle = Acticle.builder .title(标题) .introduction(简介) .coverUrl(coverUrl) .type(type) .column(column) .protagonists(主角) .tags(tags) .已完成(已完成).build(); this.repository.save(acticle); }参数列表包含了一个博客必须有的各种信息,比如:博客标题、简介、封面网址、类型、归属栏、主角名、标签、是否完成……如果你只是想了解其中的逻辑,你可能也觉得这个参数列表相当不错。它将创建博客所需的所有信息传递给该方法,这就是大多数人的想法。

查看一段代码时了解问题的最初视角。虽然这样写代码很容易让人理解,但是还不足以让你发现问题。

现在产品要求在博客中添加一条信息来表明这个博客是否免费。我应该怎么办?很简单!我直接添加一个参数。

很多屎就是这样来的,一点点积少成多,量变引发质变!这里的所有参数都是创建博客所必需的,所以可以做的就是将这些参数封装成一个类,一个创建博客的参数类: 代码语言:javascript copy public class NewActicleParamters { private String title; } private String介绍;私有 URL coverUrl;私有 ActicleType 类型;私人 ActicleColumn 专栏;私人弦乐主角;私有字符串标签;私有布尔值已完成; ... }参数列表中只剩下一个参数: 代码语言:javascript copy public void createActicle(final NewActicleParamters parameters) { ... }那么,将参数列表封装成一个对象!只要将一个参数列表封装成一个类,然后在使用这些参数的时候,就需要将它们一一取出来。这不是没有必要吗?像这样: 代码语言: javascript copy public void createActicle(final NewActicleParamters parameters) { ... Acticle acticle = Acticle.builder .title(parameters.getTitle()) .introduction(parameters.getIntroduction()) .coverUrl(parameters. getCoverUrl ()) .type(parameters.getType()) .channel(parameters.getChannel()) .protagonists(parameters.getProtagonists()) .tags(parameters.getTags()) .completed(parameters.isCompleted()) .build(); this.repository.save(acticle); } 如果你这样想,说明我们还没有形成对软件设计的理解。

我们不仅仅是简单地将参数封装到类中。从设计的角度来看,这里介绍的是一种新的模式。

模型的封装应该基于[行为]。以前没有这样的模型,所以我无法想象它应该有什么行为。

现在模型已经制作出来了,它应该有自己的支持行为。该模型的行为是构造一个博客对象,代码可以进一步重构: 代码语言: javascript copy public class NewActicleParamters { private String title; private String介绍;私有 URL coverUrl;私有 ActicleType 类型;私人 ActicleColumn 专栏;私人字符串主角;私有字符串标签;私有布尔值已完成; public Acticle newActicle() { return Acticle.builder .title(标题) .introduction(简介) .coverUrl(coverUrl) .type(type) .column(column) .protagonists(主角) .标签(标签) .completed(完成) .build(); } }创建博客的方法大大简化: 代码语言:javascript copy public void createActicle(final NewActicleParamters parameters) { ... Acticle acticle =parameters.newActicle( ); this.repository.save(acticle);这样一旦后续需求扩展,需要添加创建博客所需的内容,参数列表就保持不变,也就稳定了! 3.2 动静分离 如果这个品类继续扩大,变成一个大品类怎么办?毕竟,并不是所有场景下所有参数都属于同一个类: 代码语言:javascript copy // 根据博客ID获取对应的章节信息 public void getSections(final long acticleId,最终HttpClient httpClient,最终SectionProcessor处理器) { HttpUriRequest request = createChapterRequest(acticleId); HttpResponse 响应 = httpClient.execute(request); List

sections = toSections(response);处理器.进程(部分); }单就参数而言数量并不大。

如果只看这个方法,很难发现直接问题。绝对数量不是核心,参数列表应该尽可能小。

但是注意传入的每个参数:acticleId随着不同的请求而变化,但是httpClient和processor这两个参数是一样的,因为他们的逻辑是一样的,没有变化。即acticleId的变化频率与httpClient和processor这两个参数的变化频率不同。

不同方向的数据变化也带来不同的关注点。这里显示的是典型的动态数据(acticleId)和静态数据(httpClient、processor)。

它们是不同的关注点,应该分开。对于这种情况:静态且未改变的数据完全可以成为该方法所在类的字段。

只需将每个更改作为参数传递即可。因此,代码可以重构如下: 代码语言:javascript copy public void getSections(final long acticleId) { HttpUriRequest request = createChapterRequest(acticleId); HttpResponse 响应 = this.httpClient.execute(request); List

sections = toSections(response); this.processor.process(sections); }这个坏味道是软件设计的问题,就是代码缺乏应有的结构,因此本应是静态结构的部分被作为动态参数传递,这无意中导致参数列表变得更长。

虽然很长的参数列表可以用一个类来封装,但是封装到这个类中的前提是这些参数属于同一个类,并且有相同的变化原因!如果该方法的参数有不同的变化频率,则视情况而定。对于静态部分,本节的案例已经表明它可以成为软件结构的一部分,如果有多个变化频率,还可以封装多个参数类。

3.3 再见,马克!代码语言: javascript copy public void editSection(final longsectionId, Final String title, Final String content, Final boolean apporved) { ... }要修改的章节的ID、标题和内容。最后一个参数表示是否直接审核此修改。

经过。前几个参数是修改章节的必要信息,重点是最后一个参数。

从业务角度来说,如果是作者编辑,后面就会审稿,但是如果是编辑编辑,审稿会直接通过,因为编辑自己就扮演了审稿人的角色。于是,你发现这个参数其实是一个flag,表示后续的处理流程会有所不同。

使用标记参数是程序员在刚接触编程时常用的一种技术。正是这种简单易用的方法使得标志可以在代码中自由浮动。

不仅变量中有标记,参数也有标记。许多长参数列表包含各种标记参数。

在实际代码中,必须仔细确定每个标签的当前值,然后才能对其进行正确处理。解决标记参数问题的一个简单方法是将标记参数表示的不同路径进行分割。

这里的一种方法可以分为两种方法,一种方法负责“普通编辑”,另一种方法负责“可直接审核批准的编辑”。代码语言: javascript copy // 普通编辑需要审核 public void editSection(final longsectionId, Final String title, Final String content) { ... } 代码语言: javascript copy // 直接审核编辑 public void editSectionWithApproval( Final longsectionId, Final String title, Final String content) { ... }标签参数在代码中以多种形式存在,其中一些是布尔值、枚举值、字符串或整数。

它们可以通过分裂方法分开。在重构中,这种技术称为删除标志参数。

只有短代码我们才能更好的掌握,而写短代码就需要能够“分离关注点”。 4 总结 处理长参数列表的主要方法是减少参数数量。

最直接的方式就是将参数列表封装成一个类。但这并不意味着所有情况都可以通过封装成类来解决。

我们还需要分析所有参数是否具有相同的变化频率。如果变化频率相同,则封装成一个类。

变化的频率不同:静态的、不变的,可以成为一个软件结构;分为多个变化频率,可以封装成几个类。标记参数经常出现在参数列表中。

根据这些标记的参数,可以将该方法拆分为多个方法。

如何消除代码混乱中庞大的参数列表?

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 绝味食品:一季度净利润2.36亿元,同比增长275%

    绝味食品:一季度净利润2.36亿元,同比增长275%

    绝味食品披露一季报,一季度营业收入15.06亿元,同比增长-同比增长41.22%;净利润2.36亿元,同比增长0.69%。

    06-17

  • 工信部:加大整治APP欺骗、诱导用户下载等疑难问题

    工信部:加大整治APP欺骗、诱导用户下载等疑难问题

    工信部新闻发言人、信息通信管理局局长赵志国表示,自年初以来今年,共对29万个APP进行了技术检查,对违法APP提出了整改要求,并向社会公开通报,未整改到位的APP将被组织下架。 予以纠正。 在前期APP专项整治的基础上,工信部进一步聚焦工具类、通讯类等APP,增加欺骗诱导用

    06-18

  • B站投资动漫研发公司“碧酷文化”

    B站投资动漫研发公司“碧酷文化”

    投资界(ID:pedaily)3月29日消息,天眼查App显示,上海碧酷文化传播有限公司近期发生工商变更,股东新增上海欢点信息技术有限公司(bilibili)。 同时,公司注册资本从10000人民币增加到3300人民币。 比酷文化成立于今年6月。 是一家原创漫画制作服务商。 公司主要提供漫画

    06-17

  • 净利润下滑超90%,首创披露一季度业绩预告

    净利润下滑超90%,首创披露一季度业绩预告

    公司预计今年1-3月公司将实现利润8700元,同比下降94.13%;基本每股收益由去年同期的0.元/股下降至0.元/股。

    06-18

  • 连尚文学完成A轮融资,估值10亿美元,成为独角兽

    连尚文学完成A轮融资,估值10亿美元,成为独角兽

    在投资界,有消息称,成立仅一年的连尚文学已完成由厚朴基金领投的A轮投资。 本轮融资后,连尚文学估值达到10亿。 官方信息显示,连尚文学是连尚网孵化的网络文学电商平台。 成立于2018年7月,并于2018年8月收购了老牌原创网站逐浪小说网。 旗下还拥有连尚阅读、连尚自由阅读

    06-17

  • 启明创投梁颕宇、邝子平荣膺2023年福布斯Midas List全球最佳创投人

    启明创投梁颕宇、邝子平荣膺2023年福布斯Midas List全球最佳创投人

    启明创投合伙人梁永宇、邝子平荣膺2023福布斯最佳创投人榜全球最佳风险投资人。 当地时间5月4日,2023年福布斯全球顶尖风险投资家排行榜(The Midas List)正式公布。 启明创投管理合伙人梁宇宇、创始管理合伙人邝子平连续上榜。 福布斯全球风险投资家榜单创立于2001年,其英

    06-17

  • 三星半导体业务总裁和总经理Kinam Kim率团参观大朋 VR

    三星半导体业务总裁和总经理Kinam Kim率团参观大朋 VR

    3月17日,三星半导体业务总裁和总经理Kinam Kim率团访问中国虚拟现实领先企业大朋 VR,并体验了大朋 VR一体机。 Kim对大朋VR一体机的启动器和VR游戏给予了高度评价,对清晰、极低延迟的体验给予了高度评价。 三星半导体业务总裁与总经理Kinam Kim(右三)和大朋 VR首席执行官

    06-17

  • 瑞幸咖啡宣布独立运营小鹿茶品牌,推出新零售合伙人模式

    瑞幸咖啡宣布独立运营小鹿茶品牌,推出新零售合伙人模式

    据9月3日消息,瑞幸咖啡(纳斯达克股票代码:LK)今日召开媒体沟通会,宣布旗下子公司独立运营-品牌“耀茗茶”。 还聘请了颇受欢迎的明星肖战作为小鹿的茶品牌形象代言人。 同时推出行业首个新零售运营合伙人模式,并面向全国招募运营合伙人。 瑞幸咖啡首席运营官刘剑表示,小

    06-18

  • 【全球财经24小时】2023年12月25日

    【全球财经24小时】2023年12月25日

    2023年12月25日投融资事件汇总及详情,欢迎订阅《全球财经24小时》系列文章,动动小手指为我们助力更好更快地获取信息 带给您~ 点击此处输入表格摘要。 今日全球市场共发生33起投资披露事件,其中境内21起,境外12起。 其中,国内先进制造业9起,医疗健康行业2起,企业服务业

    06-17

  • 初创公司注意:谷歌和Facebook并购支出大幅下降

    初创公司注意:谷歌和Facebook并购支出大幅下降

    那些想推销自己的初创公司应该注意。 如果你想把自己卖给谷歌或Facebook等大公司,你可能要等待很长时间。 。 至少目前来看,谷歌和Facebook在业务收购方面的支出正在逐季下降。   过去几年,谷歌和Facebook一直在积极开展业务并购交易,不断收购新兴公司。 然而,今年第三

    06-18

  • 工业互联网安全公司长阳科技完成数千万元Pre-B轮融资

    工业互联网安全公司长阳科技完成数千万元Pre-B轮融资

    据投资界10月15日消息,亿欧网报道,工业互联网安全公司长阳科技宣布完成数十万元融资Pre-B轮融资数百万元。 轮融资。 本轮融资由基石基金、合创资本、杭州罕王锡城股权投资合伙企业(有限合伙)、深圳富城尚德创业投资中心等四家投资机构共同完成。 其中,基石基金、和创资

    06-17

  • 广东基金超级基金成立

    广东基金超级基金成立

    广东又一半导体基金来了。 投资界-Decode LP获悉,近日,广东省半导体及集成电路产业股权投资基金二期合伙企业(有限合伙)(简称“二期基金”)正式设立,目前投资金额为100万元。 值得一提的是,该基金二期的期限长达17年。 投资退出后,基金可将60%的利润转让给被投资企业

    06-18