梦工厂

个人关注jdon有一年多了,在jdon网站上也学到了很多知识,同时也验证了一些自己的一些理论。jdon是一个不错的网站。在jdon论坛上学习和了解LMAX,rribbit(事件总线),Qi4j(DCI)等知识。基本上我每周都会固定几天到jdon论坛里来逛逛,每次都有新的收获。
最近我有一个想法。结合LMAX,Rribbit(事件总线),Qi4j(DCI)+DDD以及工作流这些相关的技术、知识和理论。开发一个场景制造器。建一个类似电影制作的场景工厂。以及提供一个场景运行的环境。后面想了想,给ta取名叫ita梦工厂。借助梦想秀的概念,来一个虚拟现实秀。梦工厂将现实的各种场景通过每个成员使用梦工厂的客户端和服务来虚拟化现实场景。
场景
场景:
1)当前场景:生活事件,工作事件。重要事件的场景。分析场景:
事件场景:个人规划自己的未来。或者是做一件事情的场景。
2)历史场景:成长经历。记忆。发展过程。发展历程。重大事件,重要场景。
3)未来场景:需求,计划,梦想。

场景平台提供相关的电脑或者手机客户端(B/S、C/S),提供相关输入,有梦工厂来接收输入,构建场景,执行场景。
每个成员可以来自己构建相应的场景。同时也可以像构建QQ讨论组的形势,拉上别人一起构建一个场景(合同,活动,工作流,甚至是复杂的公司活动)。
每一场景可以是每一个人对生活场景的不同理解和认识。场景平台可以提供不同场景下的场景服务,场景模板。
梦工厂可以从公众的公证开始(提供全套的全程跟踪证据)。从帮助社会弱势群体开始。(比如各种办证,打官司,办事)。
提供全程跟踪信用体系。
场景的执行:通过短息平台等信息随时通知相关成员进入角色。处理器相应的工作。
在积累到一定量的时候,和用户群的时候,提供各行各业的场景制作,通过场景协调和管理各方面资源。优化社会资源配置。


梦工厂,场景工厂的终极目标是搭建一个超级的人机集群。这个超级的集群覆盖到社会的各行各业,各方各面。让社会上的最大多数人都有参与到梦工厂的这个终极场景中来,每一个人都是织梦者。通过每个场景的执行来完成人机集群的运作。通过场景来协调各方资源,通过梦工厂的数据挖掘分享,提供一个社会场景导航图(各种层次、各种领域、各种事件、各种活动的导航图)。让每一位参与者明白自己身处何处,以及自己的定位。明白自己从何处来,要到何处去。让各种社会资源能够在这样的社会集群中合理的利用起来。达到人机合一。人机共同进步的理想境界。

场景制造器的目标是帮助每一个成员来管理管理自己现在,过去以及未来的想法和行动。实现梦想,从织梦者开始。
最后希望随着技术的不断前进,这个梦工厂能够被搭建起来,以及运行相应的梦执行的容器。因为这个梦想太大,太遥远。但又是如此的激动,所以共享之,希望有人能够实现之。

真的不错。

可以发明一种梦工厂语言,或提供一种云计算的SaaS模式,只要他们懂得电影制作原理,就能编程或者使用这样的云平台。

也许人们方便使用计算机的时代离我们不远了。

这个“语言”应该叫MUD,古老开放的游戏!!!哈哈

这个想法来自装修行业,为了让各个参与方,遵守信用。梦工厂的最初计划是帮助弱势群体。对于忙于上班而精力不足的人,通过梦工厂的执行部分。方便他们明白相关事项,方便业主对于整个进程的控制和知晓。通过对乙方的控制。或者授权第三方进行完成相关活动。所有的过程都在网上有相关的证据。在这个场景中,的每一步以及整个执行过程和各方扮演的角色,都可以由甲方自己,或者网站服务提供商提供场景设计,场景模板。即游戏规则通过双方,多方的协同制定,并让参与者们共同在这个制定的场景中进行相应角色的活动。并通过工作流和规则对一些过程进行控制。把相应的领域模型建立并运行在一个公共平台上。
[该贴被wldst于2012-10-14 09:16修改过]

2012-10-14 09:14 "@wldst"的内容
在这个场景中,的每一步以及整个执行过程和各方扮演的角色 ...

是啊,人生就是一场戏,如果每个人扮演好自己的角色,也许未来就无需让计算机来统治约束管理我们,但这是不可能的。

刚刚看到一个将逻辑和具体客户端技术如Html Android或IOS隔离的客户端框架calatrava,它的使用说明书是完全按照BDD场景事件结果方式描述的:
https://github.com/calatrava/calatrava/blob/master/features/project.feature,摘录片段如下:


Scenario(场景): Create a project using the standard Calatrava template(BDD模板)
When I run `calatrava create simple`
Then the exit status should be 0
And the following directories should exist:
| simple |
| simple/config |
| simple/droid |
| simple/features |
| simple/ios |
| simple/kernel |
| simple/shell |
| simple/web |
And the file "simple/calatrava.yml" should contain "project_name: simple"

以上是典型的BDD模板Given When Then,框架使用者可以作为使用说明书,测试人员可以作为测试依据,开发人员可以作为设计目标文档,达到普通用户 测试人与和开发人员统一语言,真正的梦工厂编程时代已经近在身边了。

[该贴被banq于2012-10-16 09:11修改过]

我是使用cucumber-jvm


Feature: auto renew the ordered item
Background:
Given the duration of item 1 is 5 sec
And the item 1 is autoRenew and costs 100
And an community is "COM"
And an user is 1324 from community
"COM"


Scenario:
Given my user id is 1324 from community
"COM"
And my phone number is 491700000111
And I have ordered the item 1
When I sleep 5 sec
Then the item 1 should be running

后来改成了


Feature: auto renew ordered item

Background:
Given send command to create community:
"""
{
communityId :
"1",
communityName :
"hello"
}
"""
And send command to create item:
"""
{
itemId:
"1",
name:
"item 1",
communityId:
"1",
price:
"13",
duration:{
num:
"5",
unit:
"SECONDS"
},
isAutorenewable:true
}
"""
And send command to create item:
"""
{
itemId:
"2",
name:
"item 2",
communityId:
"1",
price:
"11",
duration:{
num:
"5",
unit:
"SECONDS"
},
isAutorenewable:false
}
"""

And send command to create user:
"""
{
userId :
"2",
communityUserId :
"1",
communityId :
"1"
}
"""
And send command to order item:
"""
{
orderId:
"1",
userId :
"2",
itemIds:[
"1","2"]
}
"""
And send command to create payment for order:
"""
{
paymentId:
"1",
orderId:
"1"
}
"""
And send command to confirm order:
"""
{
orderId:
"1",
paymentId :
"1"
}
"""
Scenario: renew ordered item
Given send command to renew ordered item:
"""
{
orderedItemId :
"1",
newPaymentId :
"2"
}
"""
When query the ordered item by id
"1"
Then the result is:
"""
id :
"1",
userId :
"2",
itemId :
"1",
paymentId :
"2",
state :
"Running",
autoRenewable : true
"""
When send command to renew ordered item:
"""
{
orderedItemId :
"2",
newPaymentId :
"3"
}
"""
Then the exception is: sorry, the ordered item with id
"2" is not able to be renewed as it is not auto renewable

我想也可以直接用event来做数据准备。。
不过第一种对于PO可能更友好,第二种步骤定义更方便,只要放到eventbus就可以。
[该贴被wee于2012-10-16 09:49修改过]
[该贴被wee于2012-10-16 09:50修改过]

2012-10-16 09:46 "@wee"的内容
不过第一种对于PO可能更友好,第二种步骤定义更方便,只要放到eventbus就可以 ...

前者更好些,侧重于行为方法,如果将数据定义也加入,就显得主次混合,不太好理解。

使用行为方法或事件发送来进行BDD模板描述比较直观。
以其example为案例:


功能:加法
为了避免一些愚蠢的错误
作为一个数学白痴
我希望有人告诉我数字相加的结果

场景: 两个数相加
假如(Given)我已经在计算器里输入6
而且我已经在计算器里输入7
当(When)我按相加按钮
那么(Then)我应该在屏幕上看到的结果是13

场景: 三个数相加
假如(Given)我已经在计算器里输入6
而且我已经在计算器里输入7
而且我已经在计算器里输入1
当(When)我按相加按钮
那么(Then)我应该在屏幕上看到的结果是14

事件也可以划分为契约设计Design by Contact的三段,见这个帖子
[该贴被banq于2012-10-17 09:16修改过]