代码有重复不应该想尽办法去除重复吗

当然可以。定义一套DSL查询语言就好了。比如ElasticSearch
■网友
如果写过Java或者C#,会发现能独立出来的逻辑,不独立出来,能用变量的东西,直接代入固定的字符串或者值,当项目要重构,或者要升级,工作量会很大,而且容易出错。Go语言的抽象能力很弱,很古板,除了一个 interface 和 反射,在函数和方法的设计上都有很大的局限性。甚至想要写一个能囊括所有数值类型的帮助包,都很难。但本身抽象设计,也要付出一定的代价。弹性大,所谓面向对象编程,对于一些小的项目,简直就是狗屁。回到楼主所说的问题。我觉得如果数据库的查询逻辑,已经分离好,易于维护,或者说,项目的变动性不强。我觉得三个逻辑集中处理更好。只需要甄别客户端请求的方式,用统一的逻辑回复数据。无论是实现还是以后维护都有很多好处。但如果项目的变动性大。在不久的未来,或者要插入额外的数据统计或者分析上的功能。Go 语言把很多逻辑搅在一块,加上不停的 if 判断,会很不好维护和重构。我觉得用Go 语言做东西,最好把一个逻辑切割成不能再分的固定组件,放在不同的包里,第一个是避免变量,常量,或者方法不小心被重复命名或者重复赋值的风险,第二个是弥补抽象能力不足带来的维护难度。
■网友
不要仅仅因为代码相似就去做抽象。抽象应该是基于更高层次的逻辑的。如果逻辑上的确是一回事,那就应该抽象。如果逻辑上不是一回事,仅仅是代码长得像,就不要抽象。否则等以后情况发生了变化,代码长得不像了再来拆分,徒增工作量和风险。
■网友
重用代码最基本的机制是函数,把后端、时段起始都做成函数参数即可,不需要接口
■网友
个人认为数据库操作方面做个抽象是可以的,但是把三种查询统一起来确实没有必要。三种查询语意上的共性不强,尽管当前结构相似,但不是相互可以替代的同质品。过度设计会让后来人以为里面有特殊含义,维护时投鼠忌器。复用逻辑,目的不是让代码看起来清爽,而是让修改能够低成本地传播开来。如果不用考虑日后的修改,那么怎么写并无所谓。就题主的情况来看,日后的修改恐怕更多是个别的,例如要调分时分日都访问MySQL,但是后者要更高的权限检查什么的…


    推荐阅读