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

构造函数中的业务逻辑是一个好主意吗?

构造函数中的业务逻辑是一个好主意吗?这个问题涉及到面向对象编程的设计原则和最佳实践。

在面向对象编程中,构造函数的主要目的是初始化对象的状态,而不是执行业务逻辑。将业务逻辑放在构造函数中可能会导致以下问题:

  1. 代码可读性和可维护性降低:构造函数中的业务逻辑可能会使代码变得难以阅读和维护。
  2. 代码重用性降低:将业务逻辑放在构造函数中可能会限制代码的重用性,因为在某些情况下,业务逻辑可能需要在不同的时间点执行。
  3. 测试和调试困难:将业务逻辑放在构造函数中可能会使测试和调试变得更加困难,因为构造函数的调用通常是隐式的,而且很难进行单元测试。

因此,将业务逻辑放在构造函数中并不是一个好主意。相反,应该将业务逻辑放在单独的方法中,并在需要时调用这些方法。这样可以使代码更加清晰、可读性和可维护性,并且更加易于测试和调试。

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

相关·内容

逻辑】什么前端开发业务逻辑

业务逻辑?呵呵,许多前端新人很困惑这个话题。当他们在面试当中被问到“这个业务逻辑如何处理时候,他们经常会不知如何回答。 什么业务逻辑?...其实一句话就能说清,“客户想干什么”,这就是业务逻辑。许多同学搞不清业务逻辑,其实就是没搞清你客户想要做什么。 所以有那么句话说,业务逻辑由客户脑洞来决定。哈哈哈。 正经说哈,什么叫逻辑? 咱们不说那些概念哈,就只说普通人能听懂白话。逻辑不就是有条理嘛。我们说一个人做事说话很有逻辑,很有条理。不就是说,这个人他思路不混乱嘛。...这叫正常很有逻辑。 那,为什么业务逻辑需要分析呢? 刚才我们说了,业务逻辑由客户需求决定。那么客户需求通常是不连贯跳跃性,也就是很可能是非逻辑,并且经常会变化。...例如,刚才那个,也许客户想法,我要先看到热菜是什么样?再来决定我要不要买这个菜!觉得很不可理喻吧?这个需求是倒着!!其实在日常开发很多这种情况。

3K30

java构造函数调用另一个构造函数_java构造函数

参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法专门用来创建对象方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法名称必须和所在类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回值类型...,连void都不写  * 3.构造方法不能return一个具体返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载。  ....setAge(45);         System.out.println("我姓名:"+stu2.getName()+"年龄:"+stu2.getAge());     } }

4.5K60
  • 用好JAVA函数式接口,轻松从通用代码框架剥离掉业务定制逻辑

    今天我们一起聊一聊JAVA函数式接口。那我们首先要知道啥函数式接口、它和JAVA普通接口有啥区别?...当然,我们看源码时候,会发现JDK中提供函数式接口,都会携带一个 @FunctionalFunction注解,这个注释用于标记此接口类一个函数式接口,但是这个注解并非实现函数式接口必须项。...比如,Stream filter过滤操作,其实就是传入一个元素对象,然后经过一系列处理与判断逻辑,最后需要给定一个boolean结果,告知filter操作应该保留还是丢弃此元素,所以filter...super T> predicate); 又比如,Stream map操作,通过遍历方式,将元素逐个传入函数中进行处理,并支持输出为一个类型对象结果,所以map方法要求传入一个 Function...那按照常规思路,我们要将定制逻辑从公共逻辑剥离,会定义一个接口类型,要求不同资源实体类都继承此接口类,实现接口类calculatePirce方法,这样在平台通用计算逻辑时候,就可以通过泛型接口调用方式来实现我们目的

    55430

    为什么vuedata必须一个函数

    引用类型与函数区别 引用类型与函数 object引用类型,如果不用function返回,每个组件data都是内存一个地址,一个数据改变了其他也改变了。...js只有函数构成作用域(只有函数{}构成作用域,对象{}以及if(){}都不构成作用域),data一个函数时,每个组件实例都有自己作用域,每个实例相互独立,不会互相影响。...,那么当你修改其中一个属性时候,另外一个实例也会跟着改; 两个实例必须有自己各自作用域才行,需要通过下列方法进行处理 const Mycomponent = function(){ this.data...= this.data(); } Mycomponent.prototype.data = function(){ return { a: 1, b: 2 } } 这样每一个实例...这是js本身特性带来,跟vue本身设计无关。

    1K10

    vue组件data为什么一个函数

    组件可复用vue实例,一个组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件data数据都应该是相互隔离,互不影响,基于这一理念,组件每复用一次,data数据就应该被复制一次...,之后,当某一处复用地方组件内data数据被改变时,其他复用地方组件data数据不受影响,如下面这个例子: ?...该组件被复用了三次,但每个复用地方组件内count数据相互不受影响,它们各自维护各自内部count。 ?...能有这样效果正是因为上述例子data不是一个单纯对象,而是一个函数返回值形式,所以每个组件实例可以维护一份被返回对象独立拷贝,如果我们将上述例子data修改为: ?...那么就会造成无论在哪个组件里改变了count值,都会影响到其他两个组件里count。 ?

    1.2K20

    HibernateSessionFactory线程安全?Session线程安全(两个线程能够共享同一个Session)?

    SessionFactory对应Hibernate一个数据存储概念,它是线程安全,可以被多个线程并发访问。SessionFactory一般只会在启动时候构建。...Session一个轻量级非线程安全对象(线程间不能共享session),它表示与数据库进行交互一个工作单元。Session由SessionFactory创建,在任务完成之后它会被关闭。...Session持久层服务对外提供主要接口。Session会延迟获取数据库连接(也就是在需要时候才会获取)。...为了避免创建太多session,可以使用ThreadLocal将session和当前线程绑定在一起,这样可以让同一个线程获得总是同一个session。...Hibernate 3SessionFactorygetCurrentSession()方法就可以做到。

    1.8K20

    业务用例研究组织可以在同一个建设系统可以变化

    2013-02-08 9:44:15 上孙安俊(359***041) 请问大家一个问题,业务用例研究组织可以在同一个建设系统可以变化?...2013-02-08 9:44:51 潘加宇(3504847) 没有必要变化了 2013-02-08 9:46:55 潘加宇(3504847) 这个划定范围,能把你要改进场景被包在里头就可以。...2013-02-08 9:48:41 上孙安俊(359***041) 如果想做一个部门业务管理系统, 2013-02-08 9:48:54 上孙安俊(359***041) 有时间,从部门外面,接报问题,...2013-02-08 10:14:41 上李帅(958**7) 意味着缺少了资源 2013-02-08 10:25:47 上孙安俊(359***041) 请假与加班相对,可以进行调休 2013-02...2013-02-08 11:11:15 潘加宇(3504847) 请假本身不是部门用例,但会影响部门某些用例实现,把请假作为一个场景放在这些用例下面。

    2.7K30

    创建子类对象时,父类构造函数调用被子类重写方法为什么调用子类方法?

    但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存。...如果,子类重写了父类方法,子类方法引用会指向子类方法,否则子类方法引用会指向父类方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言静态多分派,动态单分派。...其结果当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。...public static void main(String[] args) { A a = new A(); B b = new B(); } } 看一下上边代码

    6.2K10

    vue核心面试题:组件data为什么一个函数

    一、总结 1.vue组件用来复用,为了防止data复用,将其定义为函数。...4.当我们组件date单纯写成对象形式,这些实例用一个构造函数,由于JavaScript特性所导致,所有的组件实例共用了一个data,就会造成一个变了全都会变结果。...二、代码分析: vue每次会通过组件创建出一个构造函数,每个实例都是通过这个构造函数new出来 假如data一个对象,将这个对象放到这个放到原型上去 function VueComponent(){...在mergeOptions中会调用strats.data对子类data进行合并,这个方法首先会判断子类data进行判断,要求data必须一个函数,如果不是会报错告诉它这个data应该是一个函数定义...因为子组件也要有父组件属性,extend方法通过一个对象创建了一个构造函数,但是这个构造函数并没有父类属性,因为它是一个函数,和之前Vue构造函数没有关系

    51110

    抖音三面:硬件加速“层”和层叠上下文中“层”,一个东西

    大家好,我年年!这篇文章关于浏览器渲染“分层”与硬件加速,我会讲清 : 什么硬件加速? 合成层“层”与层叠上下文“层”一个东西? 层爆炸、层压缩是什么?...浏览器层分为两种:“渲染层”和“合成层(也叫复合层)”。很多文章还会提到一个概念叫“图形层”,其实可以把它当作合成层看待。为了降低理解成本,本文全部使用“渲染层”和“合成层”这两个名词描述。...开发者工具Layers 先直观感受一下“层”,打开浏览器开发者工具layers: 可以看到AB元素都在最底下图层,元素C单独一层,元素D又是一层。...对于前端来说,就是使用特定CSS属性,把元素提升成合成层,交给GPU处理; 合成层“层”可以被认为真正物理上层,浏览器把它独立出来,单独拿给GPU处理,而层叠上下文“层”则是指渲染层,更像是一个概念上层...,一个合成层可以包含多个渲染层; 层爆炸指的是大量元素意料之外被提升成合成层,即隐式合成;层压缩浏览器对隐式合成优化,chrome在94版本做到比较完善了; 使用transform、opacity

    82720

    一个完整TDD演练案例(三)

    字段 学员在定义执行该任务类时,一种可能性将输入答案作为类构造函数参数。...例如: new InputValidator("1 2 3 5").validate(); 存在两个错误: 错误地判断了输入值生命周期。什么内容应该放在构造函数作为参数?...换言之,构造函数参数与对象之间关系是什么?之所以要作为构造函数参数,就是意味着在某种场景下这些参数值应该在创建该对象时就存在。这些参数值与对象“生死与共”,它们生命周期保持一致。...如果不是,就不应该作为构造函数参数。你觉得输入应该作为构造函数?如果我要验证另一条输入应该怎么办?再创建一个InputValidator对象? 违反了阅读直觉。validate()方法验证谁?...对于表达一种错误规则来说,如果你将其看做一种业务规则,最好表达方式采用自定义异常,除非这门语言允许返回两个值(例如Go语言支持返回多个字,但并不支持异常)。

    89970

    【机器学习】机器学习实践7种常见错误

    在工程学,有多种构建键-值存储系统方式,每个设计都会构造一组不同关于使用模式假设集合。在统计建模,有很多分类器构建算法,每个算法构造一组不同关于数据假设集合。...实际上,现有损失函数很少符合业务目标。以欺诈检测为例,当试图检测欺诈性交易时,业务目标最小化欺诈损失。...在这些情况下,偏置损失函数能够支持罕见情况(如,通过上、下采样)。 2.非线性情况下使用简单线性模型 当构建一个二元分类器时,很多实践者会立即跳转到逻辑回归,因为它很简单。...以收入预测为例,如果观察到不同寻常峰值收入,给予它们额外关注并找出其原因可能好主意。...SVM核函数可被看作一种自动结合现有特征,从而形成一个高维特征空间方式。由于获得这一强大特性不需任何代价,所以大多数实践者会在训练SVM模型时默认使用核函数

    75270

    MYSQL 中间件分表一个好主意

    通过中间件来对MYSQL数据进行分表一个常见对于大数量解决方案,通过中间件将应用数据在中间层进行路由,通过路由将一张表数据,映射到不同物理数据库上表,通过应用设计分片键将数据根据规则存储在不同物理服务器上...在分表后,我们解决了单体MYSQL无法解决一些问题,那么这是一个好主意? 这里且不武断评判这是不是一个注意,我们看看在我们分库分表后,我们会遇到什么其他问题。...1 数据查询问题 上面提到,数据在分表后,需要指定分片键来对数据进行存储和查询,在数据查询过程,如果查询语句中没有分片键信息,那么数据查询本身要通过扫描全体分表后,在给出数据结果。...,分表后,数据备份中会遇到第一个挑战就是数据备份一致性,通过逻辑备份可以满足一致性数据表备份问题,但又保证不了数据备份性能问题,本来就要解决数据库性能问题,而大表在数据备份逻辑备份保证不了性能...综上,分表本身是不是一个好主意,如果一个系统建立之初,业务不稳定,数据量不确定情况下,贸然采用分表方式,可能不是适用,而在业务稳定后,再次进行改造,会解决部分上面提到一些问题,至少那时你分片键用哪个基本上可以确定

    31030

    系统性能调优必知必会 (2)

    答: 异步模型并不会让程序业务逻辑执行得更快, 但是它可以非常有效地避免线程等待, 大幅减少 CPU 在线程上下文切换上浪费时间 多进程和多线程、协程实现并发编程,各自优势和劣势是什么 答:并发粒度...实现同步,异步io 可以暂停 恢复函数。 面试算法:斐波那契数列时间复杂度为 O(1) 解法,你会?...首先,背网上流传大厂面试题,绝对不是个好主意,这是因为大厂面试题并不是固定, 往往都是考官自备面试题,这与每位考官个人经历有关,所以你押面试题概率非常低。...摘要 一个 8 核 CPU,8 个线程情况下效率最高。...模型 异步模型并不会让程序业务逻辑执行得更快, 但是它可以非常有效地避免线程等待, 大幅减少 CPU 在线程上下文切换上浪费时间。

    58010

    如何写好 GO 语言单元测试

    尽量避免依赖外部服务 即使我们十分确信某个公有云服务在线,在 UT 依赖它也不是一个好主意。...功能代码本身也许完全不需要面向接口编程,一个具体结构体就足够完成任务。可是当我们去实现相应单元测试时,有时候会发现构造这样一个具体结构体会十分复杂。...而这个ComplexInnerStruct 可能依赖了几十个外部服务,构造这样一个结构体会是一件十分麻烦事情。...4、箭头式代码,提升了圈复杂度,也降低了可测性 5、将内部逻辑与外部请求分开测试(small测试) 6、函数太复杂,没有拆分到位,让单个函数功能行为单一且简单 7、大量使用成员方法和函数,不利于传参进行测试...8、函数不要太长(建议小于40行) 9、文件不要太长(建议小于400行) 10、原子性,所有的测试只有两种结果:成功或失败 11、避免测试逻辑,即不该包含if、switch、for、while等

    2K20

    值得一看——机器学习容易犯下

    在不同业务场景下,优化目标应该是不同。许多从业者训练和选择最好模型,使用默认损失函数(比如:均方误差)。在实践,现成损失函数很少与商业目标相一致。以诈骗侦查为例。...当构造一个二分类问题,很多人就会直接想到Logistic回归,原因很简单,因为逻辑回归效率高,实现容易。...由于高维数据下判断数据是否线性可分几乎一个不现实任务,所以个人经验往往先使用逻辑回归做一次分类,但是同时也会采用决策树,或者SVM等非线性模型来对该数据进行重新分类比对。...如果观察到不同寻常收入高峰,这可能一个好主意,要格外注意他们,找出什么原因引起尖峰。但如果异常是由于机械误差,测量误差或其他造成则不适用,在将数据反馈到建模算法之前,滤除这些异常值好主意。...注:SVM核函数一个关键概念就是维度提升,如果当n << p时候,还依然采用SVM来选定模型,那么就必然会导致p进一步增加,于是导致特征参数自由变量增加,必然会对分类效果产生很大影响。

    97350
    领券