持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
分析需求
这就是我们需求分析的整个思考过程,从最粗糙、最模糊的需求开始,通过“提出问题 - 解决问题”的方式,循序渐进地进行优化,最后得到一个足够清晰、可落地的需求描述。
针对框架、类库、组件等非业务系统的开发,其中一个比较大的难点就是 ,需求一般都比较抽象、模糊,需要你自己去挖掘,做合理取舍、权衡、假设,把抽象的问题具象化,最终产生清晰的、可落地的需求定义。需求定义是否清晰、合理,直接影响了后续的设计、编码实现是否顺畅。所以,作为程序员,你一定不要只关心设计与实现,前期的需求分析同等重要。
需求分析的过程实际上是一个不断迭代优化的过程。我们不要试图一下就能给出一个完美的解决方案,而是先给出一个粗糙的、基础的方案,有一个迭代的基础,然后再慢慢优化,这样一个思考过程能让我们摆脱无从下手的窘境。
一,
一句话:使用进化算法的思想,提出一个MVP(最小可行性产品),逐步迭代改进。
拿到这个需求,假设我们不了解接口鉴权,需求又不明确,我会我自己如下问题:
- 1.什么叫接口鉴权?搞清基本概念
- 2.接口鉴权最佳实践是什么?技术调研
- 3.appid和secret key从哪里来?用户自己申请还是我们授权?用户申请是以什么方式申请(网页还是邮件?申请的网页有人做了么?)追问下去。
- 4.appid secretkey存储在什么地方呢?数据存储
- 5.用户如何使用?需要为用户提供接口鉴权使用手册和文档,及示例代码。写用户手册,文档。
- 6.这个功能如何测试?提前想好如何测试
- 7.接口鉴权功能何时上线?估计工期
- 8.鉴权成功或失败返回码和信息定义?约定返回结果 关于防止重放攻击:请求参数中还可以加入nonce(随机正整数),两次请求的nonce不能重复,timestamp和nonce结合进一步防止重放攻击。
如何进行面向对象设计?
三种设计思路
- 类是现实世界中事物的一个建模。但是,并不是每个需求都能映射到现实世界,也并不是每个类都与现实世界中的事物一一对应。对于一些抽象的概念,我们是无法通过映射现实世界中的事物的方式来定义类的。
- 大多数讲面向对象的书籍中,还会讲到另外一种识别类的方法,那就是把需求描述中的名词罗列出来,作为可能的候选类,然后再进行筛选。对于没有经验的初学者来说,这个方法比较简单、明确,可以直接照着做
- 根据需求描述,把其中涉及的功能点,一个一个罗列出来,然后再去看哪些功能点职责相近,操作同样的属性,是否应该归为同一个类。