点击上方“朱小厮的博客”,选择“设为星标”

后台回复"书",获取

后台回复“k8s”,可领取k8s资料

Service 类到底是什么含义?我相信如果碰到一个叫 SomethingService 的类,没法马上明白它到底起什么作用。

说实话,我们都很困惑。

经过多年的专业开发,在大量的代码中游走,有一点是显而易见的,开发人员不太擅长给事物命名。

作为一个菜鸟开发者,我知道当看到 SomeService 或 WhateverManager 类,或者是 WhatevsManagerService 时,你都会不知所措或疑惑不解。

Class 命名就像工作头衔

BD?实际是一个销售人员。Social Media 专家?可能是 3 周学会如何在 Instagram 上发布猫咪照片。软件工程师?实际上是堆砌代码的码农。

工作头衔和工作角色有时候不挂钩,我们更喜欢把头衔弄得比角色更花哨。

Class 命名也是如此。

服务(service)类

任何以 Service 为后缀的代码基本上都是一个逻辑垃圾箱。任何添加到程序中的新功能,最后总是以某种服务类的方式来实现。

一个服务类需要大量的构造函数参数,使得测试起来非常麻烦。要测试一个新方法 GetUserCount()?可能需要 mock 7 个完全不相关的类来实例化这个服务类。

如果 GetUserCount() 只依赖于服务类中的一个构造函数参数,那么最好把它移到自己的类中。这样一来,你就有一个非常简单的类,只有一个构造函数参数。

当然,单独的 GetUserCount 类看起来不是那么酷,但至少你知道它到底是做什么的。

测试变得轻而易举。

Manager 类

你很可能见过类似 UserManager 这样的类,它管理用户。

像服务类一样,它们也是逻辑垃圾箱。但是有一点区别。如果说服务类是一个普通的垃圾箱,那么 Manager 类就像一个纸板垃圾箱,它更特殊一点。

你会面临和服务类一样的处理单元测试的问题。在做最微小的操作之前,你需要 mock 一大堆东西。

Util 类和 Helper 类

"我们不知道把这些代码塞在哪里好,所以就弄了一个 Util 类"。

这些都是烦人的东西。关于这一点,没有什么好说的了。

怎么破?

很简单。给出与职责相匹配的合适名称。把一个类命名为GetUser,并且只有一个方法,这并不丢人。实现也简单,每个人都知道它是做什么的。容易进行单元测试。

停止代码膨胀,简化这些类。比如,构建只有一个方法的类。

关于作者:

Nicklas Millard 是一家快速发展中的银行担任软件工程师,负责构建关键任务的金融服务基础设施。

此前,他曾是 Big4 高级技术顾问,为商业客户和政府机构开发软件。

他的 LinkedIn:https://www.linkedin.com/in/nicklasmillard/

英文原文:

https://medium.com/datadriveninvestor/the-true-meaning-of-service-and-manager-class-names-d09a08731fd9

想知道更多?描下面的二维码关注我

后台回复"技术",加入技术群

后台回复“k8s”,可领取k8s资料

【精彩推荐】

  • 原创|OpenAPI标准规范

  • 如此简单| ES最全详细使用教程

  • ClickHouse到底是什么?为什么如此牛逼!

  • 原来ElasticSearch还可以这么理解

  • 面试官:InnoDB中一棵B+树可以存放多少行数据?

  • 微服务下如何解耦?对于已经紧耦合下如何重构?

  • 如何构建一套高性能、高可用、低成本的视频处理系统?

  • 架构之道:分离业务逻辑和技术细节

  • 星巴克不使用两阶段提交

点个赞+在看,少个 bug ????

聊聊 Service 命名与设计相关推荐

  1. 聊聊Service Mesh:linkerd

    [编者的话]随着企业逐渐将传统的单体应用向微服务或云原生应用的转变,虽然微服务或者云原生应用能给企业带来更多的好处,但也会带来一些具有挑战的问题,如怎么管理从单体应用转向微服务所带来的服务间通讯的复杂 ...

  2. Distributed System: Naming Service (命名服务)

    About Naming Service: Name Space (命名空间):在一个特定空间内,某一资源(文件.网页.音乐.图像等)具有全局唯一的标识符URI(名字).例如,目前的互联网(Inter ...

  3. 聊聊产品经理原型设计中的 “道术器”

    作为产品经理,在原型设计过程中,掌握其中的"道术器",对于高阶产品发展有着潜移默化的帮助. 本文以摹客为例,聊聊产品经理原型设计中的 "道术器",希望对你有所启 ...

  4. 聊聊Tomcat的架构设计

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号「后端进阶」,专注后端技术分享:Java.Golang.WEB框架.分布式中间件.服务治理等等. 老司机倾囊相授,带 ...

  5. mysql可以存储标点么_MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  6. MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  7. MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  8. 阿里mysql命名规范_MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  9. MySQL命名、设计及使用规范

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

最新文章

  1. 购买《四级网络工程师预测试卷与考点解析》,哪里最便宜?
  2. IDEA下——Spring入门程序
  3. 你只会用 ! = null 判空?嘿嘿!
  4. Python-dataframe合并(merge函数)
  5. flag push tcp 作用_TCP/IP协议到底在讲什么?
  6. (error) ERR wrong number of arguments for 'hmget' command
  7. webpack4进阶配置
  8. 【bug】HbuilderX运行到微信小程序 报错
  9. The Windows Phone Emulator wasn't able to create the external network switches 解决方法
  10. 7-8 12-24小时制 (15 分)
  11. java 泛型研究 初探索(一)
  12. 使用LaTeX写论文
  13. phalapi可以依赖注入么_3.2 PhalApi 配置
  14. rds mysql 导出数据文件_rds数据库导出
  15. 11.[STM32]PWM脉宽调制-呼吸灯
  16. 自己动手学TCP/IP--ICMP(ping报文)
  17. PHP获取文件夹下所有图片信息
  18. 【编程语言】Python 从菜鸟到高手
  19. 外贸网站如何合理搭配色彩——摘自外贸宝-外贸网站建设
  20. 关于java的项目部署以及需要注意的地方

热门文章

  1. c语言单链表数据显示,C++_C语言单链表常见操作汇总,C语言的单链表是常用的数据结 - phpStudy...
  2. gtest 测试java_LangTest
  3. 微星z370黑苹果_记录一下装了第二台黑苹果(Z370 + High Sierra)
  4. 用python画一个人_用turtle画个单身狗送给自己~
  5. dbeaver导出建表语句_细致入微:如何使用数据泵导出表的部分列数据
  6. 二叉树(先序遍历)非递归
  7. C# HTTP请求后对gzip页面实现解压缩
  8. MySQL MHA配置常见问题
  9. 给vs2010安装上cocos2d-x的模版
  10. iPhone系统常用文件夹位置