敏捷开发用户故事系列之七:用户故事与MVC

这是用户故事系列的第七篇。(之一,之二,之三,之四,之五,之六,之七,之八,之九)

 

用户故事和MVC没有关系,因为MVC是实现方法,因此在思考用户故事的时候,不要一下就想到实现方法,很容易把故事写坏。

但是MVC和用户故事有很大的关系,如果用户故事写好了,做MVC的时候,一定要记得参考用户故事。

本人在C++的年代用过MVC,但那个时候MVC还只是一种编程思想,说用了也行,说没用也行。但到了C#之后,就出现了正牌的自称是MVC的东西(现在最新版本是MVC3),本人也在用。Java世界也有MVC的概念,但是没有见识过,下文中所描述的MVC,若没有特殊说明,均指Asp.net MVC;但相信对Java中的MVC也有借鉴意义。

利用MVC实现用户故事的技法

如果您已经认可之六中产生用户故事的方法,那么也就得到了这样的一个用户故事树,右边则是为其量身定做的Controller-Action(来自实际项目): 

======================================

下面是对应的Controller-Actions

UsersController

--Users/Index

----什么也不是

--/Users/Details

--/Users/User2Authorities

--/Users/Users2Roles

--/Users/Freeze

--/Users/Edit

--/Users/Delete

--/Users/BatchCreate

RolesController

--Roles/Edit

--Roles/Details

--Roles/Delete

--Roles/Index

AuthoritesController

--Authorities/URA

--Authorities/Delete

--什么也不是

--Authorities/Index

----什么也不是

--/Authorities/Authorities2Roles

--/Authorities/URGA

=============================================

注意看每个Controller实现了一个史诗故事(要管理的数据),每个Action则实现了一个(偶然多个)用户故事(用户的业务操作),有几个值得注意的地方:

1. 一个Controller几乎正好可以实现一个史诗故事

2. 一个Action因为正好是一个动词,所以几乎正好和一个用户故事对应。

有两个地方违反了,如“角色首页(新建+查看)”和“权限首页(新建+查看)”,因为为了方便我们在两个Index里边放了个新建用的TextBox,方便直接创建(因为角色和权限都只有一个名字而已,所以觉得犯不上做个独立页面了)。

为了能记住这一点,我们在故事的缩写名字上加了(XX+XX)的标记,为了日后能自动计数故事。

3. 用户没有“创建”故事,也没有Users/Create,因为用户只有两种正常的创建方法:Register和BatchCreate,我们选择了后者。因此既没有“创建用户”这个故事,也没有“/Users/Create”这个Action。

4. 几个绿色箭头是“增强”类型的故事(详见之五),它们正好也不对应Action。

 

上面提到的是我们实际的一种用法,未必是普适的但在我们项目中非常适合,甚至应该称为“舒服极了”。

这种史诗-故事与Controller-Action之间偶然的巧合,实际上背后有其必然性。

利用MVC实现用户故事的心法

MVC以往研究的重点,是何为M,何为V,何为C,以及三者之间的关系。

我们在用了一段时间后,发现其中的每一个,都还有更深层次的理念在里边,这里谈的就是Controller及其Action。

在MVC三者呆在一起的时候,问:何为Controller?估计还是挺容易回答的。

但如果不提MV,直接问:何为一个Controller?何为一个Action?却挺难回答的。

如果去一个非MVC的网站或软件,最令人烦恼的,是网站的每个页面未必有自己独立的链接,比如逛了半天,顶上的链接一直是http://xxx.../login=xxxx,想为某个页面加个收藏夹都不行。MVC在很大程度上解决了这个问题:要操作的数据是Controller,要做的操作是Action,而参数则是具体操作谁,比如/Users/Details?user=cheny或CSDN博客上常见的:http://blog.csdn.net/cheny_com/article/details/6616794 样式。

所以如果已经按照之六中提到的数据-操作方法来组织史诗-故事结构了,而且又在使用MVC,则非常推荐编程时将其继续映射到Controller-Action中

可能细心的读者已经注意到本文图中有些故事后面有个链接符号,那个正是我们在已经实现了的即金色的故事的后面,加上了其超链接(全部是/Controller/Action,一一对应,非常舒服)。这相当于一个Action写好了,一个故事(偶然情况是多个)就正好也完了;而测试人员就可以点击那个链接去到Action测试。他测试完了Action,就能说故事被测试完了(而不只是Action被测试完了)。

以这种方式来对应用户故事和开发内容,产品经理和开发人员很容易沟通,因此非常推荐使用。

 

用户故事 vs. FPA功能点分析法 vs. MVC

☺ 功能点分析法(FPA)、敏捷开发用户故事、Asp.net MVC在一定程度上具有相同的目的:作为用户需求与开发人员工作的桥梁,只是侧重点有所不同。因此若能将它们联合应用,就可能用一种组织方式贯穿性地管理估算、需求管理、架构设计三者。

完整地表述三者的关系,大致如下:

 用户故事FPAMVC
数据史诗故事

ILF内部逻辑文件

EIF外部接口文件

Controller
操作普通故事(功能)

EI外部输入

EO外部输出

EQ外部查询

Action

 

 

点击下载免费的敏捷开发教材:《火星人敏捷开发手册》

 

转载于:https://www.cnblogs.com/spring3/archive/2011/10/12/2401398.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七、规则组织的衍生组织——菱形斜纹组织数学模型的建立

基础概念公式推到可参考该专栏下的前几篇博文。 菱形斜纹组织图: 分析:首先3上2下2上1下,飞数为1,右斜。kw8表示从左下角开始往上数8格为纬峰所在位置;kj8表示从左上角开始往右数8格为经峰所在位置。 这样就将菱形斜…

显卡测试软件毛毛虫,超龙超龙,与众不同,顶流配备,散热一流,3070Ti超龙旗舰版评测...

可能大家都没想到此次显卡荒会持续近一年,还是出现国家级干涉才将这股“歪风”刹住了。而且也仅仅算是刹住了大陆的速度,主要踩死刹车的应该就是黄大厨。他从5月初推出的新核心就采取了出厂即锁算力的做法,但是即便如此,那些看着高…

poj 2513 Colored Sticks

// 判断图是否联通 在连通的基础上还要判断是否存在欧拉通路// 判断连通就并查集了 判断是否存在欧拉通路&#xff1a; 点度数为数的点 1 >3就是不存在的 其它是存在的// 我开始用 map 判重 然后就悲剧了一上午 好久没写 Trie树了 都忘了、#include <iostream> #in…

strictmath_Java StrictMath ulp()方法与示例

strictmathStrictMath类ulp()方法 (StrictMath Class ulp() method) Syntax: 句法&#xff1a; public static double ulp(double do);public static float ulp(float fl);ulp() Method is available in java.lang package. ulp()方法在java.lang包中可用。 ulp(double do) Me…

八、非规则组织分析及其数学模型——平纹变化组织

非规则组织顾名思义&#xff0c;无法通过一个数学模型来描述所有的非规则组织、对于每一个具体的非规则组织而言&#xff0c;其也有一定的规律性可循&#xff0c;即可通过分析每一个具体的非规则组织的组织点运动规律来建立相应的数学模型。 一、平纹变化组织 平纹变化组织即…

怎么看xp计算机是32位还是64位,教你查看XP系统的不同32位还是64位详细的步骤

电脑中使用的不同的版本如果安装一些大型的游戏的时候都是有技巧来实现的&#xff0c;那在XP电脑中想要知道的对于不同的32位还是64位的版本的文件操作的时候新手是怎么知道自己安装的软件的版本呢&#xff0c;今天小编就来跟大家分享一下教你查看XP系统的不同32位还是64位详细…

微软面试100题2010年版全部答案集锦(含下载地址)

微软等数据结构算法面试100题全部答案集锦作者&#xff1a;July、阿财。时间&#xff1a;二零一一年十月十三日。引言无私分享造就开源的辉煌。今是二零一一年十月十三日&#xff0c;明日14日即是本人刚好开博一周年。在一周年之际&#xff0c;特此分享出微软面试全部100题答案…

get post

1. get是从服务器上获取数据&#xff0c;post是向服务器传送数据。2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中&#xff0c;值和表单内各个字段一一对应&#xff0c;在URL中可以看到。post是通过HTTP post机制&#xff0c;将表单内各个字段与其内容放置在HTML …

LeetCode 27.移除元素 思考分析

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

九、非规则组织分析及其数学模型——曲线斜纹组织

曲线斜纹组织图&#xff1a; 因为其形状酷似抛物线&#xff0c;抛物线又是曲线中的一种&#xff0c;故称为曲线斜纹组织。 特点&#xff1a;1&#xff0c;每一根经纱上的组织点运动规律不变 2&#xff0c;飞数是变化的&#xff0c;故也称为变飞数组织 飞数满足的两个条件&…

ulp通信_Java Math类ulp()方法及示例

ulp通信数学类ulp()方法 (Math class ulp() method) ulp() method is available in java.lang package. ulp()方法在java.lang包中可用。 ulp() method is used to return the size of a ulp of the given argument, where, a ulp of the given value is the positive distance…

计算机公式column,函数公式的左膀右臂:ROW、COLUMN函数知多少

一个公式生成乘法口诀表演示的公式中用到了两个函数&#xff1a;ROW和COLUMN&#xff0c;这两个函数的用途非常广泛&#xff0c;可以配合其他函数实现很多功能(尤其是和VLOOKUP函数)&#xff0c;另外和这两个函数相似的还有ROWS和COLUMNS函数&#xff0c;也顺便介绍下。函数说明…

apache2.4.x三种MPM介绍

三种MPM介绍 Apache 2.X 支持插入式并行处理模块&#xff0c;称为多路处理模块&#xff08;MPM&#xff09;。在编译apache时必须选择也只能选择一个MPM&#xff0c;对类UNIX系统&#xff0c;…

LeetCode 15. 三数之和 思考分析(双指针解)

目录初解&#xff1a;未考虑去重二解&#xff1a;未考虑去重位置三解&#xff1a;AC题目&#xff1a;给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有满足条件且…

十、非规则组织分析及其数学模型——锯齿形斜纹组织

锯齿形斜纹组织图&#xff1a; 分析&#xff1a; 前半齿长度k&#xff0c;表示山谷到山峰的列数&#xff0c;也就是锯齿的宽度&#xff1b; 锯齿飞数s&#xff0c;表示山峰到山峰的行数&#xff0c;也就是锯齿的高度。 起始点相差4格&#xff0c;也就是第一部分整体向上移动…

Linq lamdba GroupJoin外连接示例

其实用from..Linq语句做外连接简单而且便于理解&#xff0c;我个人使用lamdba纯粹是技术上的追求吧 DataTable exceldtnew DataTable();DataTable nomacdtnew DataTable();exceldt exceldt.AsEnumerable().GroupJoin(nomacdt.AsEnumerable(), a > a.Field<String>(&q…

ajax为什么有时候不行,为什么不能用ajax调用

Ajax取值时出现未知的运行时错误的解决方法在Ajax里经常会通过innerHTML来改变界面&#xff0c;这个比使用DOM要简单一些。比如&#xff1a;element.innerHTML "put code here"不过&#xff0c;在IE中&#xff0c;有时候会出现"未知的运行时错误(unknown runti…

Java Hashtable size()方法与示例

哈希表类size()方法 (Hashtable Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the number of key-value pairs that exist in this Hashtable. size()方法用于返回此哈希表中存在…

十一、非规则组织分析及其数学模型——芦席斜纹组织

芦席斜纹组织&#xff1a; 该组织是由左斜和右斜有机的结合在一块的&#xff0c;因为其外观酷似芦席故称之为芦席斜纹组织。 织物组织效果&#xff1a; 所需参数&#xff1a; 其基层组织采用双面加强型斜纹&#xff0c;即分子和分母是相同的组织点&#xff0c;例如2上2下(2个经…

LeetCode 18. 四数之和 思考分析(双指针解)

目录需要注意的几点1、去除剪枝操作2、去重操作的细节code以及效果&#xff1a;题目给定一个包含 n 个整数的数组 nums 和一个目标值 target&#xff0c;判断 nums 中是否存在四个元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值与 target 相等&#…