欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分解和拆分需求,写代码的第一步

程序员文章站 2024-03-23 22:45:46
...

今天接到的需求是要求在商城的首页弹出一个“系统维护”的通知,20200731~20200804这段时间展示。
如果不做需求的分解和拆分,我们可能是拿到图之后,马上写样式,写完测试发布。完成这个简单的需求。
等等!让我们来研究一下这个简单的需求。

拆分需求

  1. 打开首页,展示弹窗。弹窗可以关闭。
  2. 时间段的控制。每次进入页面,取当天的时间,看是不是在这段时间内。如果超过时间,或者不在控制的时间,这个弹窗通知是不需要展示的。
  3. 如果用户一天内多次打开首页,每次都弹窗提示吗?问产品,答案是每天只要展示一次即可。
  4. 与原有的业务是不是耦合的?查看原有的代码逻辑,发现这个业务与另外的一个提示框是耦合的。那么要定一个顺序,最后商议,利用接口返回的错误信息,先展示另外一块提示框。如果没有这块错误信息,再展示这个需求的弹窗提示。
  5. 仅仅首页上增加这块显示吗?如果是用户从其他的页面进入,要不要提示?问产品之后,答案是任意页面进入都需要弹窗出来。那么我就开始琢磨抽象出来这块业务为公共方法。
  6. 目前的逻辑,是不是很容易兼容这个需求?我找到一个公共类的js文件,每个页面都会先调用这块。于是就把这块业务封装进入这个js文件。这个需求,我仅仅需要更新这个文件即可。
  7. 如果下次又要弹窗显示一个”新的通知“,产品只给图片和时间段。能不能几分钟就搞定?

从元思维考虑一个需求

  1. 时间 时间拉长,长周期,是考虑一次还是考虑多次需求?
  2. 成本 多个文件更改,还是尽量少文件修改,写很多地方,还是写一个函数封装
  3. 地点 改在哪里?每个用到的地方都去改?

代码实现这个需求

			var k = 'iNoticeTime', d = app.formatDate(new Date(), 'yyyyMMdd'),
				s = [20200730, 20200804], t = parseInt(d)
			if (s[0] <= t && s[1] >= t) {
				if (localStorage.getItem(k) != d) {
					localStorage.setItem(k, d)
					dlg = app.modal('<div class="layer" style="position:relative;width:100vw;"><img style="width:100%" src="../static/res/index/notice20200731.png">'+
						'<div class="f" style="position:absolute;bottom:1rem;width:100%;"><a class="ui-dialog-btn" style="margin:0 25%;height:3rem;"></a></div></div>')
					dlg.on('click', '.ui-dialog-btn', function(){
						dlg.close()
						idType()
					})
					return
				}
			}