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

在一个工厂的构造函数中有太多的params代码味道?

在一个工厂的构造函数中有太多的params代码味道是指在构造函数中存在过多的参数,导致代码看起来冗长、复杂,难以维护和理解。这种情况通常发生在需要传递大量参数给构造函数以初始化对象的情况下。

为了解决这个问题,可以采用以下几种方法:

  1. 使用对象字面量:将多个参数封装成一个对象,通过对象字面量的方式传递给构造函数。这样可以减少参数的数量,提高代码的可读性和可维护性。
代码语言:javascript
复制
function Factory(options) {
  this.param1 = options.param1;
  this.param2 = options.param2;
  // ...
}

var factory = new Factory({
  param1: value1,
  param2: value2,
  // ...
});
  1. 使用默认参数:对于一些可选的参数,可以使用默认参数来简化构造函数的调用。这样在使用时可以只传递必要的参数,而省略可选参数。
代码语言:javascript
复制
function Factory(param1, param2 = defaultValue, param3 = defaultValue) {
  this.param1 = param1;
  this.param2 = param2;
  this.param3 = param3;
  // ...
}

var factory = new Factory(value1);
  1. 使用工厂模式:将对象的创建逻辑封装到一个工厂函数中,通过工厂函数来创建对象。这样可以将参数的处理逻辑从构造函数中分离出来,使代码更加清晰。
代码语言:javascript
复制
function createFactory(param1, param2, param3) {
  var obj = {};
  obj.param1 = param1;
  obj.param2 = param2;
  obj.param3 = param3;
  // ...
  return obj;
}

var factory = createFactory(value1, value2, value3);

以上是针对"在一个工厂的构造函数中有太多的params代码味道"的解决方案,希望对您有所帮助。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

Java web开发,一个jsp里放太多java代码后果,摘自 java web轻量级开发面试教程

现要做一个简单登录页面,如果用户通过验证,会显示Welcome用户名欢迎词,反之则返回登录页面让用户再次输入 这部分完整代码是JSPDemo项目里login.jsp,下面来分析一下关键代码。...首先来分析一下业务,当进入这个页面的时候,需要判断是否有用户名和密码信息输入,以此来做不同动作,所以开始部分,需要用一个内嵌对象request来完成这个功能,主要代码如下。...31和35行得到了用户名和密码之后,用第38行Class.forName载入了JDBC驱动程序,然后第43行定义了一个PreparedStatement来执行SQL语句,并在第46行用一个ResultSet...①修改点一:我们需要调整供用户验证身份Form代码,加入验证码输入框。 我们不得不修改两个重复且相同代码,这样不仅会增加工作量,而且一个疏忽就会导致忘记修改其中一个,增加代码维护难度。...具体来说,JSP页面里,剥离与显示无关代码一个JSP页面里,应该少见甚至不用包含起来Java代码

1.3K70
  • 我看依赖注入

    代码中有下列一些问题,这些问题是由于两个显式调用new关键字构造对象实例引起。...继续我们重构,重构后构造函数代码部分已经加粗显示,重构动作改动非常小,但是管理依赖能力却大不相同。...当我们使用“new”时候,就是实例化具体类。当出现实体类时候,代码就会更缺乏“弹性”。越是缺乏弹性越是难于改造。在后面我们还会继续讨论“new代码味道”。 简单工厂 让我们继续回到游戏。...这是设计模式里对于工厂模式说明。 工厂模式确实在一定程度上解决了创建对象难题,项目中不会再到处充斥了“new代码味道”。但是有一个问题没有解决,要实例化哪一个对象,是在运行时由一些条件决定。...有些类是需要默认构造函数,比如MVC框架Controller类,一旦使用构造函数注入,就无法使用默认构造函数

    87730

    什么样代码是好代码

    ",比较容易搞清楚,避免代码“坏味道",离好代码就不远了,坏味道一二三及推荐做法: 代码重复 函数太长 如果太长(一般不宜超过200行,但不绝对),你自己都不太容易读懂,请不要犹豫,拆成小函数吧。...还是那个大型复杂金融软件,核心几个Algo C++文件,2万到3万行,我滴血 数据泥团 即很多地方有相同三四项,两个类中有相同字段、许多函数签名中有相同参数。...把这些应该捆绑在一起数据项,弄到一个类里吧。这样,函数参数列表会变短不少 函数参数列表太长 工作中有7个参数函数调用,搞清楚每个参数业务含意,和顺序有点头晕。...,delteteUserByName 太多if else 循环里定义大量耗资源变量 大对象,如果可以放在循环外,被共享,推荐这么搞 try 块代码太长 try块只包住真的可能发生异常语句,最小原则...TRUE : FALSE); } 静态工厂方法,不必每次调用时都创建一个对象;而且相较于构造器,它有名称,便于阅读和理解;同时可以返回原类型任意子类型;也可以根据参数不同,返回不同类对象,如EnumSet

    1.3K20

    什么样代码是好代码

    什么是好代码,不好定义,但是关于什么是代码"坏味道",比较容易搞清楚。...还是那个大型复杂金融软件,核心几个Algo C++文件,2万到3万行,我滴血 数据泥团 即很多地方有相同三四项、两个类中有相同字段、许多函数签名中有相同参数。...把这些应该捆绑在一起数据项,弄到一个类里吧。这样,函数参数列表会变短不少,简单化了 函数参数列表太长 工作中有7个参数函数调用,搞清楚每个参数业务含意,和顺序有点头晕。...,delteteUserByName 太多if else 循环里定义大量耗资源变量 大对象,如果可以放在循环外,被共享,节省时间空间 try 块代码太长 try块只包住真的可能发生异常语句,最小原则...TRUE : FALSE); } 静态工厂方法,不必每次调用时都创建一个对象;而且相较于构造器,它有名称便于阅读和理解;同时可以返回原类型任意子类型;也可以根据参数不同,返回不同类对象

    1.4K60

    JavaScript插件化开发

    ://localhost/api/demo/test'); 上面这个代码示例很简单,实现了一个get方法调用api函数,后来陆陆续续加上了post、put、delete function httpGet...person.name = '王二' 工厂模式 声明式虽然能创建对象,但是有个缺点,如果要创建多个对象,就需要重复写以上代码。...假如你熟悉面向对象编程,那么你一定更倾向于使用new Person() 还有一个重要好处:使用构造函数模式产生对象式该函数实例。...也就是说工厂模式下,得到person是Object实例,而构造函数模式下得到person是更为具体Person实例。...我们可以用instanceof关键字来判断一个实例属于哪个类型,或者我们可以通过实例constructor来看构造函数是谁 到此为止,如果不考虑构造函数模式一些细节问题,这种插件写法已经可以应用到我们当前项目里了

    11730

    这些Coding套路你不会还不知道吧?

    :one:全局单一实例:单例模式:car:获取对象超简单:工厂模式:clipboard:重复代码太多?试试:模板方法模式:ghost:接口对应功能不知道怎么维护?...设计模式提供了一种标准化解决方案,可以让相同功能代码多个地方重复使用,从而避免了重复编写相同代码,减少了开发时间和成本。提高代码灵活性和扩展性。...设计模式允许开发人员不改变现有代码情况下,轻松地添加新功能或修改现有的功能。...试试:模板方法模式模板方法模式通常应用于以下场景:(1)当一个算法步骤中有一部分是不变,而另一部分是需要根据不同条件进行变化时,可以使用模板方法模式来实现。...通过将它们作为函数选项传递,可以更灵活地控制函数行为具体场景:gRPC服务进行实例化时候有些参数可以不同填,即选填,之后源码内部会使用默认值,于是我们就可以使用以下方式进行处理。

    32130

    狗屎一样代码!快,重构我!

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 (二)代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3、过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。 将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    74130

    创建者模式(创造型设计模式)

    设计模式指导思想:找到不同场景下,需求容易发生变化地方,把这一部分变化逻辑封装起来。 创造型设计模式一共有5种:工厂模式、抽象工厂、单例模式、创造者模式、原型模式。本文我们介绍工厂模式。...实际编程中,当一个构造函数接受十几个甚至更多参数时,可以需要考虑下是否需要创建者模式。 实现步骤 创建生成器接口,接口包含创建产品多个步骤。 创建生成器实现类,实现创建产品所有方法。...在产品构造函数中使用生成器创造产品。...throw new Error("Method not implemented."); } } /** * 具体产品类 * 构造函数中传入创建者接口类型...* 当创建逻辑特别复杂时,也可以把下面构造函数中调用Builder方法代码,放到单独类中。

    47220

    十一、详解面向对象

    很显然,工厂模式帮助我们解决了重复代码麻烦,让我们可以写很少代码,就能够创建很多个person对象。但是这里还有两个麻烦,需要我们注意。 第一个麻烦就是这样处理,我们没有办法识别对象实例类型。...); // true console.log(foo instanceof Function); // true 因此工厂模式基础上,我们需要使用构造函数方式来解决这个麻烦。...四、原型 虽然构造函数解决了判断实例类型问题,但是,说到底,还是一个对象复制过程。跟工厂模式颇有相似之处。...在这个例子中,我们同时原型与构造函数中都声明了一个getName函数,运行代码结果表示原型中访问并没有被访问。...在上面我们已经理解了构造函数本质,它其实是new内部实现一个复制过程。而我们继承时想要,就是想父级构造函数操作子级构造函数中重现一遍即可。我们可以通过call方法来达到目的。

    58620

    设计一个小接口展开讨论

    蔡了一听,知道老马又要上课了,赶紧推了一把椅子,收了心里腹诽,像个乖乖女一般规规矩矩地坐下来,看着老马屏幕上打开一个类。正是昨天自己写一个工厂类Kafka251Factory。...更何况,作为一个工厂对象而言,频繁地创建工厂实例,既无必要,也增加了垃圾回收负担。” 蔡了点点头,说道:“大叔,我貌似懂了,就是说从调用者直觉来看,这样静态工厂方法应该更符合调用者期望。...,将它们定义为字段,然后构造函数中接收其值,这一设计是合理。...马丁花说到这里,想了想,继续说道:“若要说重复,代码config.item(label).topic()出现了两次,有着很明显重复代码味道,可以再改进一下。” “这个还不简单!”...当你发现调用一个对象时,频繁出现多个方法链式调用,只要不是像Java Stream API那样流畅接口,都说明它封装不够彻底,属于Martin Fowler指出Message Chain坏味道

    25820

    代码太烂了!你以为我真想写“垃圾代码”吗?

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 二、代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3、过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    96030

    狗屎一样代码!快,重构我!

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 (二)代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3、过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。 将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    77930

    狗屎一样代码!快,重构我!

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 (二)代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...同一个中有相同表达式:提炼出重复代码,然后让两个地方都调用被提炼出来那一段代码; 两个互为兄弟子类内含有相同表达式:提炼出相同代码,将它推入超类内; 两个毫不相干类中出现:将重复代码提炼到一个独立类中...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。 将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    1.1K40

    何时应该重构代码?如何重构代码

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 二.代码味道 1.重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3.过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11.隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12.以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。将构造函数替换为工厂函数。...3.构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4.函数下移 超类中某个函数只与部分(而非全部)子类用到。

    1.7K30

    告别垃圾代码,请收下这几个锦囊妙计!

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 (二)代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3、过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    45410

    告别垃圾代码,请收下这几个锦囊妙计!

    重写而非重构一个清楚讯号是:现有代码根本不能正常运作。 (二)代码味道 1、重复代码 如果你一个以上地点看到相同程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好 。...如果代码前方有一行注释,就是提醒你:可以将这段代码替换成一个函数。 条件表达式和循环常常也是提炼信号。 3、过大类 如果想利用单个类做太多事情,其内往往就会出现太多实力变量。...使用太多间接层,使得系统中所有函数都似乎只是对另一个函数简单委托,造成委托动作之间晕头转向。...11、隐藏函数 某个函数,从来没有被其他任何类用到 。将函数修改为private。 12 、以工厂函数取代构造函数 希望创建对象时不仅仅是做简单建构动作 。将构造函数替换为工厂函数。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。超类中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 超类中某个函数只与部分(而非全部)子类用到。

    53630

    创建

    6.内联singleton 用creation method代替构造函数 因为java中,构造函数和类名相同。...构造函数过多,则需要用参数进行区分不同功能。这种方式会让人迷惑。 用一个简单static函数包装下原本构造函数,能极大消除创建迷惑。真是太棒了。...把创建知识搬移到factory中 创建漫延指,创建一个对象代码和数据重复出现在了多个地方。此时管理起来就不方便了。 简单factory把创建对象过程和数据封装在了一个类对象中。...通常,简单工厂就能满足需要,但如果工厂中有太多switch,可以考虑将工厂升级为抽象工厂。 factory容易被滥用,因为factory仅仅是一组creation method集合。...用build封装composite 有时,一个composite实现不是那么可爱。比如系统自带高度抽象xml包。 此时,可以上面再加一层封装。即用builder代码来替换原生代码

    56320

    《重构-代码整洁之道TypeScript版》第一天

    《重构--改善既有代码设计》 第2版提供了 JavaScript 版本,已经非常方便我们前端同学阅读了,但是 TypeScrip 如此火热今天,缺了 TS 版本,始终觉得是些遗憾,所以老袁打算每天拿出一些时间将一些非常经典案例...① 重复性工作,既有的代码无法帮助你轻松添加新特性时 ② 修补bug时,排查逻辑困难 ③ 太多代码无注释,已然连自己都无法快速理清代码逻辑 1....[ ] Replace Conditional with Polymorphism(以多态取代条件表达式) [ ] Replace Constructor with Factory Method(以工厂函数取代构造函数...:如果一个函数能够不需要任何参数能够解决你问题(包括使用其他函数,),这当然是绝佳。但是我们日常开发中需要经常为函数添加参数。 动机?...,减少了过长参数(它是代码味道Data Clnmps,坏味道不是翻译尴尬是坏味道包含如下),后面也会给大家逐步介绍。

    1.1K30

    如何解决代码腐败味道

    Duplicated Code(重复代码) 如果你一个以上地点看到相同程序结构,设法将他们合而为一,程序会变得更好。...你应该将循环和其内代码提炼到一个独立函数中。 三. Large Class(过大类) 如果想利用单个类做太多事情,其内往往就会出现太多实例变量。一旦如此,重复代码也就接踵而至了。...和“太多实例变量”一样,类内如果有太多代码,也是代码重复、混乱并最终走向死亡源头。...如果有五个“百行函数”,他们之中有很多代码相同,那么你也许可以把他们变成五个“十行函数”和十个提炼出“双行函数”。...如果类中有一个复杂算法,需要好几个变量,实现者不希望传递一长串参数,所以他把这些参数放进字段中,导致坏味道

    85120
    领券