关于四色原型中的Place扮演某个角色参与某个活动的疑惑

到现在为止,我可以理解的是:PPT中的Party和Thing扮演某个角色参与到某个活动中。
比如图书管理系统中,某个图书馆帐号(LibraryAccount,它是PPT之Party)扮演借书者(Borrower)的角色(Role)参与到借书的活动(MI)中去;而书(Book,它是PPT之Thing)则以被借书(BorrowedBook)的角色(Role)参与到该借书的活动中去;而图书馆则是这个活动的发生地,按照四色原型的定义就是PPT之Place,我知道在四色原型中,任何一个活动的参与者都因该是角色,即Role,那么图书馆这个Place是扮演什么角色参与到这个活动中去的呢?

按照我现在的理解,
1)如果是Party扮演某个角色参与某个活动,则Party在扮演该角色后会增加一些与该角色相关的状态或行为;
2)如果是Thing扮演某个角色参与某个活动,则Thing在扮演该角色后会增加一些与该角色相关的状态;
3)如果是Place扮演某个角色参与某个活动,那么这个Place似乎没有任何变化,也就是它不会新增任何的状态或行为;就像图书馆那样,我想它肯定是一个Place,但是它不会因为参与了借书活动而多出了一些状态和行为。

所以,我该如何去理解Place扮演角色这句话呢?

之前我看了好几遍Jdon007写的那个图书馆里系统的例子,里面它给图书馆(Library)这个PPT赋予了TakeBook(bookName)和PutBook(book)这两个行为,我怎么觉得很不习惯呢,如果图书馆是一个Place,又怎么会有行为呢?
[该贴被tangxuehua于2011-07-09 14:19修改过]

还是重复说说一下我的理解。

1、业务规则,进入场景的前置条件以及在场景中的交互规则。
比如借书场景的前置规则,先要检察一下图书卡是否借满了书、欠费等。
进入场景后,也会根据借阅条款对角色行为进行限制与控制,比如还可以借几本书等。

2、角色行为或属性,依赖于场景的实体抽象。
比如,书的在图书馆进新书的场景和借阅的场景的行为或属性是不同的。
这些行为活或属性,是有场景约束的实体抽象,不放在书这个实体上。

3、模型行为或属性,不依赖于场景的实体抽象。
比如,在图书馆中,图书管不管在任何场景,书的入库、出库行为都存在,这些行为在该领域中,没有场景约束,就放在图书馆这个实体上。
这时候 PPT = Role, 可谓本色出演。

之前,我把借阅规则理解为MI,感觉还不太准确,确切地说,
它是描述活动的前置条件(进入场景的约束,不符合条件就进入不了该场景)和交互规则(场景中的行为约束)。

PPT,Party参与者,Thing参与物,Place活动场所。Place是可能有依赖场景的行为的。比如教室,上课时是课堂,考试时是考场;比如土地,建造房子时是工地,种植粮食时是田地,是有可能增加依赖场景的行为和属性的。

碰巧在图书馆领域中,图书馆似乎都是本色出演而已。PPT是在领域中不依赖场景的实体抽象,这个是他们的基本特征,至于是参与者、参与物、还是活动场所,这只是细化的描述而已。

感谢jdon007的耐心解答,我现在明白了些了。
图书馆在借书或还书的场景中是本色出演角色,也就是说图书馆的确也可以理解为以某种“图书馆”的角色参与到借书或还书的场景中,只是在这个例子中,正好这个“图书馆”的角色的扮演者PPT也正好叫图书馆,所以我们称为本色出演角色。

如果用你的教室扮演课堂,或教室扮演考场的例子,那就很好理解Place和Role的区别了。教室就是PPT,而课堂或考场则是Role。

不知道我这样理解你的回复是否正确?

2011年07月09日 16:10 "@tangxuehua"的内容
不知道我这样理解你的回复是否正确? ...

不客气,我只是提供我的理解,供你参考而已。

你不要太纠结于字眼或思考概念时(如Place)局限于某个例子,例子提供了一个思想的跑马场,但不意味着思想只能在这个跑马场跑,在广阔的草原上(生活和自然中)自由奔驰岂不更惬意?

不过,好像只有纠结了,才知道什么不是纠结,整个人的思维不掉进坑里,是很难体会跳出坑外的乐趣,也无法意识到自己原来一直呆在某个坑里。

愿你早日跳出此坑,再寻找另一个坑,跳进去。呵呵。

2011年07月10日 20:23 "@jdon007"的内容
正好这个“图书馆”的角色的扮演者PPT也正好叫图书馆 ...

我是同意这个理解的。以PPT本身来参与,是一种特例(本人不怎么倾向)。或者说换一个角色名:借出者,这样就会避免混淆。当然一个角色一直都是同一个实体来扮演,这个确实是麻烦了。

看了你在博客园的文章,有些一些略微不同的看法,那边没有账号,就在这里说说。

1)图书卡是借书工具,自动记录(或辅助记录)借阅史,其原始的形式是笔和纸。如果卡没有名字,还会觉得卡是用户的映射?一些场所有贵宾卡之类的,是可以不署名的,只要肯出钱买就行了。

2)图书卡和图书馆一样,在图书管这个领域中就是为“书的借阅”而生,其行为是他们天生的职责或领域赋予他们的固有职责,无需扮演,或所谓本色出演。(PPT = Role)

3)角色是一个不错的概念,但也不宜过分使用。像DCI的那个例子中,将银行账号分为源帐号角色和目标帐号角色,我个人认为这有点过了,虽然这是DCI理论的提出者举的例子。在银行领域中,账号本来就是可以存钱和取钱的。按照这个思路,图书卡,也要分为两种角色,一个是借书卡的角色,一个是还书卡的角色,书也分为两种角色,被借的书,被还的书。那岂不是自找没趣。

4)角色表达的是实体在场景约束下承担的职责,模型表达的是实体在领域约束下的承担的职责。如果还记得大学的政治经济学,可以把实体理解为商品,角色体现使用价值(社会属性/场景约束下的职责),模型体现价值(自然属性/领域约束下的职责)。

5)领域已经为身在其中的所有实体或事物界定一些固有的职责,这些职责分配到模型中,这是领域存在的根本,没有了这些,也就无所谓领域不领域了。在领域中,模型依赖场景而承担新的职责,才考虑分配在角色中。

6)在这个小小的例子中,似乎只有书在不同的场景才有新增的属性。藏书时,借阅时,购新书时,有差异,且是有依赖场景的。

注:banq注意一下,我在这个帖子发的帖子,怎么会跑到uda1341发的帖子上去,而且我要删除或编辑那个帖子也不行,只能在这个帖子说明了。看看是什么问题,可能的话,帮我删除,毕竟与uda1341帖子讨论的内容无关。
[该贴被jdon007于2011-07-12 22:13修改过]

没想到我在博客园写的文章被你看到了呀,献丑了,呵呵。
jdon007,什么时候我才能达到你这样的领悟境界呢?我写那篇文章之前已经做了非常多的学习和不停的反复思考,并且还花了非常多的时间开发基于C实现的DCI基础架构,同时开发一个可以让领域模型和外界交互的事件框架,这样我就可以让领域模型不需要Repository了。总之,自我感觉还挺良好的,但被你上面发表的回复后,我发现我还有很多东西好像还没抓住本质,1)对职责到底该属于领域对象还是属于场景角色的还是不能很好的分析出来;2)对如何分辨和发现新的角色还是不能把握好一个度;关于你提到的模型的价值、使价值,自然属性、社会属性,似乎提醒了我!

我在想关于分析职责该属于对象还是角色的问题上,是否真的有大家都认同的观点呢?之前我看到你和SpeedVan的关于图书卡的问题上的精彩讨论让我受益匪浅,但容易也让我觉得为什么这么一个看似简单的问题都这么难达成一致,尤其是在富有经验的开发者之间,那我真的不敢想象在一个真正的大型具有复杂领域逻辑的系统业务分析时,我们如何达成一个统一的,结合DDD和DCI思想的领域模型呢?

话说到这个份上,我感觉其中的意境和思想已经无法再讲的更清楚了,一切都要靠自己多实践,多思考吧。我要走的路还很远,希望能有一天能达到你们这些高手的水准。

见笑了,论计算机技术本身,你肯定比我好得多,我顶多算个软件开发队伍的杂牌兵,其他一些人才可能是真的技术高手,如uda1341,banq等。

面对复杂的业务时,大家都求真务实的话,在核心认识可能达成一致,总的来说,我也感觉非常难,除问题本身,问题之外也有很多东西不好解决。职责分配的依据,最好与事实或现实吻合,如果可能的话。

你很认真,也乐于思考与分享,这很难得。

和谐的气氛不错~其实只要肯想,肯思考,哪怕走上不同的路,肯定都是有深度的。

算我多嘴吧,又把话题挑起:关于jdon007说的第一点,我对“卡,其原始的形式是笔和纸”这样的观点是严重不同意的,也就是根本分歧点。现实中,卡并不用作记录历史记录,它只记录一个卡号,该卡能借书,是因为授权(间接授权,卡指定一个授权的人)。若果把卡作为原始的形式,则此卡非彼卡了。其实很好理解,卡丢了我的信息还有没有?卡是指定我,还是代表我?当然每个人的认识都于自身认识相关,到底卡指人,还是卡代人,看着领域办吧。

jdon007的其他观点有独特的见解,我也正在吸纳中。其实也不必过谦,我对banq、xmuzyu、jdon007、flyzb、uda1341、showerxp(顺序不代表能力,只是大概代表我认识过程)等的帖子都平等对待的。只有不仰头不低头,才能把对方的观点看清楚。发现闪亮点将其学习,正是交流的根本目的。

其实难以统一根本原因在于对事物认识的不同。一种情况是对着不同的事物,另一种情况是对着同一事物也有不同见解。认识对现实吻合是最难的一件事,正因为,我们从一开始并不知道到底谁是事实,所以就需要掌握大量的领域知识来判断。

2011年07月11日 11:14 "@SpeedVan"的内容
你不要太纠结于字眼或思考概念时(如Place)局限于某个例子,例子提供了一个思想的跑马场,但不意味着思想只能在这个跑马场跑,在广阔的草原上(生活和自然中)自由奔驰岂不更惬意?

不过,好像只有纠结了,才知道什么不是纠结,整个人的思维不掉 ...


精彩。

2011年07月11日 11:14 "@SpeedVan"的内容
比如教室,上课时是课堂,考试时是考场;比如土地,建造房子时是工地,种植粮食时是田地,是有可能增加依赖场景的行为和属性的 ...

是角色把行为带到了场所,并非场所自己诞生出行为,场所是因为角色的行为而改变了相应的场景。
不理解把行为加入到场所的做法,行为应该跟着角色走。
[该贴被jonathanks于2011-07-13 17:52修改过]

2011年07月11日 11:14 "@SpeedVan"的内容
比如教室,上课时是课堂,考试时是考场;比如土地,建造房子时是工地,种植粮食时是田地,是有可能增加依赖场景的行为和属性的 ...

我觉得jdon007是把行为理解成为场所的规则了。当角色进入场景时,其按照场所的规则来做出相应的行为。对吗?

那个图书馆的例子到现在也快半年了,当时写时,并没有想到在卡上会有这么截然不同观点。事物的定义、职责的划分有时很难,更难达成统一的意见,也许真如uda1341所说,可以描述清楚的只有事实。

将事物与商品做的类比,或许我们可以得到一些启示。自然属性不依赖于社会属性(用途),领域属性(模型)不依赖于场景属性(角色),反之则不然。

jonathanks,你说的“场所”是表示PPT的Place(活动场所),还是表示MI(场景)?那个例子,是想说明PPT表示实体的模型,都可能扮演依赖场景的角色,不管是参与者(Party)、参与物(Thing)、还是活动场所(Place)。

场景!= 场所,老师在教室上课 != 教室。

业务规则表达进入场景的前置条件及对角色交互的约束。场景体现的业务规则,并非角色行为本身,而是约束角色行为。

我想你有可能误解了我的意思。

2011年07月13日 09:48 "@achilleswar"的内容
角色是一个不错的概念,但也不宜过分使用。像DCI的那个例子中,将银行账号分为源帐号角色和目标帐号角色,我个人认为这有点过了,虽然这是DCI理论的提出者举的例子。在银行领域中,账号本来就是可以存钱和取钱的。按照这个思路,图书卡,也要分为两种角 ...

很好的讨论。也说说我的理解。角色是相对于“关系”或“过程”而言的(关系和过程在时空背景上是可以统一的,但不妨简单地理解为角色出现的两种基本情形)。“扮演”这个词,很好地揭示了“角色”的实质。

我没看到引文中说的例子,但从这里字面透露的意思看,“源帐号”和“目标帐号”,是转账过程中的角色,这是非常典型的“角色”例子。至于“卡”是否要分为借和还的角色,取决于你在“借/还”两个过程中是否将它作为参与者——简单的模式,卡就是借/还者,那么,它就同时是一个账户。理解的要点是,同一个对象(例如卡,账户,姑且叫对象吧)在不同的关系或过程中,可以扮演不同的角色。

再者,卡与人之间不是映射关系,而是“使用/拥有”关系。复杂一点的设计,例如,也可以允许“多-多”关系,以及变更。

[该贴被flyingrobot于2011-07-13 21:46修改过]

2011年07月13日 21:38 "@flyingrobot"的内容
很好的讨论。也说说我的理解。角色是相对于“关系”或“过程”而言的(关系和过程在时空背景上是可以统一的,但不妨简单地理解为角色出现的两种基本情形)。“扮演”这个词,很好地揭示了“角色”的实质。

我没看到引文中说的例子,但从这里字面透露的意思 ...

我觉得你的看法和我完全一致:jdon007所说的文章是我写的,请参看:http://www.cnblogs.com/netfocus/archive/2011/07/10/2102099.html
[该贴被tangxuehua于2011-07-13 23:04修改过]