单点登陆有几种实现方式

在罗伯特·C·马丁(Robert C. Martin)的“清洁代码”的第17章中,作者描述了“ 代码气味 ”的思想,即在开发中的实践,尽管它们没有明确违反任何标准(无论是否为未成文的),但它们却留下了缺乏经验或缺乏纪律的“恶臭”。 我喜欢这个主意; 在我看来,我经常遇到这些“代码异味”(鉴于我经常与不同的团队合作),它们会使代码难以破译和维护。

以方法的参数数量为例。 根据Martin的说法,最佳情况下将有零个参数,但是任何数字(最多三个)都是可以接受的。 当然,三是作者选择的任意数字,但我认为我自己的限制将落在同一范围内,尽管有时肯定取决于条件。 有时,不可能对参数列表大小施加这样的限制,尤其是在处理已经建立的代码库时,但是我确实有一些建议。

  1. 是否有大量参数源自同一对象实例? 尝试改为传递包含对象,并在方法内部根据需要引用属性。
  2. 或者,可以在对象本身上实现该方法,从而无需在该方法内引用另一个对象。
  3. 有时,如果不对所涉及的代码进行重大重构,就不可能更改参数列表。 如果重构的风险过高(通常是由于时间限制),一种选择是构建一个瞬态对象,该对象封装完成方法功能所需的所有属性,然后将单个对象传递给方法,或者再次,使该方法存在于瞬时对象本身上。

另一种“臭味”的做法是“输出争论”的想法。 期望参数应该仅仅是方法的输入,而不能被方法的逻辑所改变。 建议这种做法是在OOP之前的日子里进行的,这些日子将需要输出参数,但现在不再如此。 现在,更好的做法是将保留字“ this”视为输出参数。 同样,表达这种做法的最好方法是让受逻辑影响的对象自己实现该方法。

标志参数是传递给方法的布尔值,表示该行为可能正在执行两个单独的功能。 更好的替代方法是将逻辑实现为两种方法,一种是将参数设置为true时执行的逻辑,另一种是将参数设置为false时执行的逻辑。 这迫使您也为这两种实现提供了更有意义的函数名称,从而使每个使用它们的人的意图都更加清楚。 有时以这种方式使用标志参数,因为两条逻辑路径在彼此分开之前共享大量的逻辑步骤。 如果是这种情况,最好创建第三个方法来实现公共逻辑路径,同时在其他两个方法中保持发散逻辑。

作者没有提到但与该主题相关的一个想法是,使用局部方法变量作为方法的返回值,而不是返回对象本身。 为了澄清起见,请参见下面的两个实现示例。 如果满足条件,第一个将简单地返回数字,而第二个将数字设置为局部变量,并在方法末尾返回该变量。

int getNumber(){if(condition1){return 1;} else if(condition2){return 2;} else {return null;}}
int getNumber(){int returnValue = null;if(condition1){returnValue = 1;else if(condition2){returnValue = 2;}return returnValue;}

我觉得第二种实现是有优势的,至少有一个原因。 该方法从哪里退出总是很清楚,因为它只能在一个地方退出。 这使得它更容易理解和维护。

最后,简单地说就是“死函数”,即系统中任何地方都没有调用的函数。 源代码控制的存在是有原因的; 用它!

参考: Keyhole Software博客上的JCG合作伙伴 Robert Rice对方法实现的一些思考 。

翻译自: https://www.javacodegeeks.com/2013/10/a-few-thoughts-about-method-implementation.html

单点登陆有几种实现方式

单点登陆有几种实现方式_关于方法实现的几点思考相关推荐

  1. 单点登陆的三种实现方式

    背景:单点登录(Single Sign On, SSO)是指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的应用系统.举例来说,百度贴吧和百度地图是百度公司旗下的两个不同的应 ...

  2. ad域帐号登录提示无法处理请求_面试官:说一下单点登录的几种实现方式

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:张永恒 来源:https://www.cnblogs.com/yonghengzh/p/13712729.html 在 ...

  3. 什么是单点登录,单点登录的三种实现方式

    转载地址:https://www.jianshu.com/p/613e44d4a464 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在 ...

  4. 什么是单点登录?单点登录的三种实现方式

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  5. 分布式锁的三种实现方式_基于 redis 的分布式锁实现

    云龙 资深运维开发工程师,负责游戏系统配置管理平台的设计和开发,目前专注于新 CMDB 系统的开发,平时也关注运维自动化,devops,python 开发等技术. 背景 CMDB 系统里面的机器数据会 ...

  6. 实战:单点登录的两种实现方式,附源码

    最近工作有点忙,好久没更新文章了,正好这两天在整理单点登陆相关的文档,今天趁着小孩睡着了

  7. mysql的四种连接方式_数据库的四种连接方式分别是什么

    数据库的四种连接方式分别是:1.inner join内连接:2.outer join外连接:3.cross join交叉连接:4.natural join自然连接. 内连接 内连接 ---拼接查询结果 ...

  8. 前端把cookie写在父域里_单点登录的三种实现方式

    前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保 ...

  9. ad域帐号登录提示无法处理请求_面试官:来说说单点登录的三种实现方式

    前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保 ...

最新文章

  1. 心得丨走过最长的路,就是机器学习过程中的弯路
  2. 阿里云Redis (安装包安装篇)
  3. 【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor
  4. ajax js引用,ajax 引用js文件内容
  5. 深度学习之TensorFlow
  6. python中文教程github_GitHub - Virile-Tao/python_data_structures_and_algorithms: Python 中文数据结构和算法教程...
  7. K-special Tables
  8. 2012年2月份第1周51Aspx源码发布详情
  9. 华为数通HCIA——网络架构
  10. iphone连电脑服务器未响应,今天要闻iphone8无限转圈黑屏强制关机没反应(苹果电脑开不了机黑屏)...
  11. weiphp短信接口教程
  12. 当健身用户进入直播间:一场全新内容生态的破壁与重建
  13. 第九章 科学、技术与工业
  14. 【Mysql】调优必知的sql访问方式
  15. 决策树之ID3 ,C4.5 ,CART,理论+实例
  16. python演化博弈仿真_求教 matlab做三方演化博弈仿真
  17. 软考-嵌入式系统设计师-笔记:计算机系统基础知识
  18. 量子计算机 郭光灿,郭光灿(中国科学院院士、量子信息学家)_百度百科
  19. 【postman】postman中文传参出错
  20. 新计算开创产业新格局

热门文章

  1. python异常类封装_在Python中封装异常
  2. Virtualized Firewall for Cloud Security: Working on Machines Identities, NOT on Their IP Addresses
  3. 判断输出质素(素数)的程序及其优化
  4. CentOS7(Linux)下安装gitblit并注册成系统服务
  5. 0xc000000e错误解决办法(补充)
  6. UVW源码漫谈(三)
  7. 数据结构与算法——算法时间复杂度
  8. CentOS下安装docker和配置镜像加速器
  9. 图像分割技术语义分割代码_用5行代码对150类对象进行语义分割
  10. 【YOLOv5实现玩手机检测】