北京-FireSpider 男2013/2/4 20:45:25
青润老师在线吗?
北京-FireSpider 男 2013/2/4 20:51:30
被动的Actor好像真的存在呀。在邱郁惠的《系统分析师UML用例实战》的第47页有一个例子:购物网站中有一个用例“刷卡结账”,它有一个被动的Actor,是“信用卡系统”。
青润 21:59:21
呵呵,邱的做法也是错误的。
我看过她的那本书,里面在这方面,确实错了。
北京-FireSpider 男 22:00:21
这个问题值得关注,因为涉及对外接口这一块。
哪比如“打印”用例需要连接到“打印机设备”,应该如何表示呢?
青润 22:01:14
这些都属于外部系统
只需要通过系统表示即可。
至于这些系统内部如何运行,是不需要考虑的,因为这不是你要开发的部分。
北京-FireSpider 男 22:01:47
画成一个方框?
对
青润 22:02:42
系统本来就分为外部和内部,内部还要分为各个实施阶段,也就会出现本次开发需要实现的,和不需要实现的。
不需要实现的部分与外部系统是同等的表示方式。
如果不是这样表示,难道你也要把这些uc表示成actor么?
北京-FireSpider 男 22:03:23
嗯,画成Actor感觉是挺怪异的。
但,如果一个用例是一个WebService的方法,是需要外部系统主动调用的。哪这个外部系统作为主动调用方,可以画成Actor吗?
青润 22:04:21
我从02年开始就一直强调actor必须是可以主动发起行为的,因此数据库,时钟等都不是actor。
另外,还有一个很多人都犯的错误,那就是对actor上进行类设计。
那也不是actor,因为这也只是外部的接口调用,如果不是接口调用,那就不是外部系统了。
如果外部系统可以通过非接口对你的系统中的方法进行调用操作,那你的系统就会出现严重的安全隐患,或者属于被操控。
青润 22:05:21
这在系统设计中是完全不能容忍的。
北京-FireSpider 男 22:07:55
主动发起系统行为的,通常是人,但也可以是系统,还可以是设备的按钮等。
青润 22:08:11
设备的按钮,也是人去操作的。
如果是时间控制器,那也是人进行的设定,然后才能启动,所以,一切非主动行为者,都不能定义为actor
北京-FireSpider 男 22:08:34
嗯
但如果是一个远程系统的话,就不是了。
青润 22:09:04
那就是接口,也同样不是actor
北京-FireSpider 男 22:09:46
比如,一个C# Remoting服务器在运行时暴漏了Rometing的接口,客户端通过接口来调用他的功能。
青润 22:10:31
无论任何一种,你都可以找到actor的存在,如果找不到,那就肯定是系统设计中出现了问题,或者没有调研清楚需求。这一点,不容置疑。
北京-FireSpider 男 22:11:57
不过,要是通过关注客户端的的人,是不是有点太间接了?
青润 22:12:19
这是个原则,不是说可以谈判的,对于系统,必须弄清楚原委,否则,肯定会出现设计问题。
如果你找不到实际的actor,那就会出现问题,或者隐藏的actor出现。
北京-FireSpider 男 22:12:51
主要是,不知道哦客户端的系统是怎么开发的,人触发的操作经过多少个接口调用以后,才调用到服务器端接口的。
青润 22:13:32
你自己思考一下你假设得这个过程,这个过程如果出现了这么多的接口调用,是否违反了系统设计原则?
北京-FireSpider 男 22:15:31
我想想
青润 22:16:53
嗯。考虑一下OOAD的设计原则,然后再来思考你刚才提出的这些问题。
北京-FireSpider 男 22:19:01
好的
先谢谢老师,我思考思考。
青润 22:19:25
好的。不客气。