[需求]需求分析能力之样例:引入领域模型的前前后后

news/2024/7/3 8:30:05
2006年07月27日 13:50:00

需求分析能力之样例:引入领域模型的前前后后

曾经遇到过一个系统需求,需求分析人员在听到客户说要增加"修改员工密码"功能后,就原封不动的把这个功能写在了文档中。如果把这个需求交给实现人员,很多实现人员,会在"员工"(Employee)这个类中加一个属性"password"。如果仅用名词法,来验证需求,完全符合:"员工",是一个比较重要的概念。"什么的什么,可以提取为属性",因此"员工的密码"可以提炼为"员工"类的password属性。

实现人员嘘了口气:"万事OK。"

真的OK吗?

需求场景:员工和用户的分离

如果把密码放在了员工中,基于CRUD的做法,我们通常会把对员工的修改放到了一个界面上。也就是说,管理员增加一个人员,系统默认设置对应人员的密码。

这个时候,IT部门提出异议了,增加员工,是人力资源部门的事情,而是否给员工开放账号,是信息中心的事情,不是所有的员工都开放账号的,HR部门无权擅自开放账号。

"账号?","是啊,"IT部门的人说,"用户账号啊"。

得,我们丢了一个重要的概念 --用户。

同样的道理,员工办理离职的时候,也是要先去信息中心销户,然后再去HR部门办理离职,因此,我们把Password放到员工中,是不合适的。员工需要和用户分开。

需求场景:员工和客户、供应商、合作伙伴的合并:

客户提出新的需求:原先我们建立的都是员工和密码,现在,我们要打通企业的供应链,给我们的供应商和客户包括合作伙伴,有条件的开放系统的功能。因此,他们也要有账号和登录密码。

是分开设置代理,还是把他们合并成一个抽象类?在不考虑系统性能的前提下,我们可以暂时套用《分析模式》的做法,抽象出Person (或Party)领域对象来。

需求场景:分别的账号登录

客户说:"我希望员工在登录后,只选择他想使用的岗位角色?"什么意思?

"比方说张X,在集团公司内是出纳,而在集团的某个下属公司,是会计,他上午在集团上班,下午,在下属公司上班。因此,登录的时候,需要选择角色。"

客户是不会太轻易的就区分出员工和用户的区别的,在描述的时候,就会混淆着使用员工和用户这两个概念。另外,岗位和角色,也是非常类似的两个概念。

在没有统一的独立的登录服务器的情况下,你感觉,这种方式实现起来有问题(想想,都会有什么问题?),于是说服客户:"给你建两个账号行吗?",用户也没有细考虑,居然同意了。因此,这时的一个Person,就对应了两个账号,密码呢?自然不能放到Person中了。

我们再想像一下这时的登录过程,简单的交互步骤如下。

actor使用账号和密码登录,

系统验证账号和密码有效,显示允许的功能操作。

需求场景:选择性激活

如果客户坚持只能一个人只能用一个用户账号登录,会是什么样子?

使用用户账号 password 登录,系统需要列出其所有的角色,角色按所属公司列出,

actor激活某公司下的某种角色。(关于角色的动态激活,可以参考RBAC模型,这里不再多讲。)

要考虑的问题就产生了(用例中的扩展流):

actor已经在其他的地方登录了系统(激活了其它角色了)怎么办?

我们现有的领域模型是,角色是跟公司(法人)相关的,如果客户又提出,角色和部门相关,哪该怎么办?

需求场景:限界上下文

我和BSP的主要负责人建华,曾经就人员和用户,以及岗位和角色的类似,进行了大量的讨论。得出来的结论是,这是从不同的角度在看待同一事物,在企业资源模型中,HR是重要的企业资源,而在权限模型中,人力是作为受限单元的。因此,他们应该分属于两个不同的限界上下文,而限界上下文,也是领域模型的一个重要的组成部分。

题外话:

作为LoushangBSP产品的参与者,我曾经为这些需求问题(比我举出来得要多的多)困扰过许久,还好,现在,BSP中的组织机构和权限模型已经相对丰富,足以应对这些需求场景了,现在,我可以把一些简单的需求,共享给大家。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=985580



http://www.niftyadmin.cn/n/3661322.html

相关文章

thinkphp漏洞_CNNVD关于ThinkPHP远程代码执行漏洞情况的通报

近日,国家信息安全漏洞库(CNNVD)收到关于ThinkPHP 5.0远程代码执行漏洞(CNNVD-201901-445)【http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVDCNNVD-201901-445】情况的报送。成功利用此漏洞的攻击者可以对目标系统进行远程代码执行攻击。ThinkPHP 5.0.x–5.0.…

[领域]一个简单的UML应用题

2006年07月26日 15:08:00 UML是一个语义丰富的建模语言,但是,在实际的使用过程中,出现了很多滥用和误用的情况。如果,你只是关心使用UML的最少集合进行建模,是可以的(我个…

内存都是由半导体器件构成的_Linux 内存相关问题汇总

linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用…

tensorboard可视化_TensorBoard可视化实战(三)

概述在《TensorBoard可视化实战(二)》中讲述了如何使生成的图更具有可阅读性,但是生成的可阅读参数较少,本文旨在增加TensorBoard的展示信息。mnist_board_2.py代码import osimport tensorflow as tfLOGDIR ./mnistmnist tf.contrib.learn.datasets.mn…

[个人]百度裁员录音门

2006年07月17日 20:32:00 手头有个录音,朋友给我的,说:"听听,百度裁员的,特无耻"。耐心听完,第一感觉,是骂我的朋友,"怎么能说无耻呢?玷污了无耻这个词了…

linux中使用u盘和光驱的命令_Linux基础命令的使用

一、基础知识操作系统的组合结构计算机的诞生的时间大概是上个世纪40年代,诞生于美国宾夕法尼亚大学。此时的计算机的结构已经进化有5大基本部件组成。计算机的5大部件都遵循冯诺依曼体系,分别为:运算器、控制器、存储器、输入设备、输出设备…

[豆趣]儿童读物

2006年10月11日 22:51:00 豆娘打电话说,自己受了刺激。追问下,才说:后面楼的某个小娃子,比豆少要小半岁,居然识1000个字,会算100以内的加减,会背诵小九九。。。末了,豆娘叹口气&…

tensorflow输出网络结构_TensorFlow之estimator详解

Estimator初识框架结构在介绍Estimator之前需要对它在TensorFlow这个大框架的定位有个大致的认识,如下图示: 可以看到Estimator是属于High level的API,而Mid-level API分别是: Layers:用来构建网络结构 Datasets: 用来…