由request.getSession()想到的函数参数设计原则

我们经常这么干,通过request.getSession()获取到session,然后查询其中的变量来判断当前用户是否登录。一天遇到有人问,能不能通过request.getSession()==null来判断用户没有登录呢?立马想到,什么时候会返回空呢?浏览器每次访问到服务器时,服务器会自动给创建一个session啊。那不能为空啊?但是超时或者通过手动的invalidate()之后session确实会失效,失效了返回就应该是空啊?
查看API才知道getSession()还有另外一个可以传递boolean类型参数的版本,传递true表示没有获取到session时自动创建一个,传递false则不创建。疑问解开了,还是自己太二了,不了解人家的API。但是后来发现,网上其他很多人都遇到了这个相同的疑问,开始反思这API设计的是否有问题。之所以出现这样的疑问,是因为大家很容易将这个函数的boolean参数给遗忘掉,以至于到最后大家都每天熟练的使用request.getSession(),只知道他能获取到session。这是函数设计上的一个忌讳,《Clear Code》中说标识参数(布尔参数)的存在意味着你在公然宣布,这个函数做了不止一件事,即便是HttpServletRequest中的getSession做了重载,但是它起到的效果是一样的(对外界来说是一个函数做了两件事情)。
另外,getSession()函数的名称和其实际的操作内容也有出入,《Clear Code》中说函数实际的操作要与名称相符,不能背后还有其他副作用(这也是“只做一件事”的原则),而getSession()却不仅仅只是“get“,还带有了”create“的含义。
当然了,也许设计者考虑的是,getSession(true)比getSession(false)更为常用,并且创建一个session也无关紧要,也不影响谁,所以有意将getSession(flase)给弱化了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对该函数进行白盒测试的一些测试用例: 1. 参数params为空或为null的情况,需要测试方法能否正确处理这种情况。 2. 参数sixiangpindechengji中的各个属性为空或为null的情况,需要测试方法能否正确处理这种情况。 3. request.getSession().getAttribute("tableName")返回null或不存在的键的情况,需要测试方法能否正确处理这种情况。 4. tableName等于"xuesheng"的情况,需要测试方法能否正确设置sixiangpindechengji的xuehao属性。 5. tableName等于"jiaoshi"的情况,需要测试方法能否正确设置sixiangpindechengji的jiaoshixingming属性。 6. 参数params中包含各种可能的查询条件,例如分页参数、排序参数、模糊查询参数、精确查询参数等等,需要测试方法能否正确处理这些条件。 7. 需要测试EntityWrapper、MPUtil等工具类的各种方法,包括likeOrEq、between、sort等等,以确保方法能够正确使用这些工具类进行查询条件的处理。 8. 需要测试sixiangpindechengjiService的queryPage方法,包括查询结果是否正确、分页是否正确、排序是否正确等等,以确保方法能够正确查询数据并返回正确的结果。 9. 需要测试R.ok()方法是否能够正确返回结果,以及返回的结果是否包含"data"键和正确的查询结果。 10. 需要测试方法的性能和稳定性,例如对于大量数据的查询是否能够正常工作,并且在高并发的情况下是否会出现线程安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值