摘要:四色原型分析與SpecFlow
源起:
物件導向系統,建立一個領域模型是首要之事,模型的好壞幾乎決定了系統的所有面向。一直以來,只有四色原型在這一塊上建立理論。
四色原型:
有興趣的人可去先去研讀http://www.ithome.com.tw/itadm/article.php?c=52750。對四種原型如何取用,我已經翻來覆去思考了好幾年。可以大略這麼解釋,所有的活動都是交易,有各種人事物會參予,結束後狀態會改變,並留下一條記錄,何年何月何日誰誰誰一起做了什麼,最後的結果是什麼。有些東西很固定,參予活動卻不會改變狀態,而且可以拿來解釋另一個東西。有時候我們會為了參加活動的不同,而建立不同的身份。
紅色(Moment-Interval):
是一種活動、交易記錄,一定有個時間的欄位,標示發生的時間。
綠色(Party-Place-Thing):
人事地,交易的元素。
藍色(Description):
對綠色的描述,或是綠色的群集,不會在活動中改變屬性。
黃色(Role):
可以從兩個方面來思考。
1、Permission:用來呈現綠色的實體可以加入什麼紅色的活動
2、State Pattern:狀態模式,每參加完一個活動,就產生一個狀態物件,可以放狀態的邏輯
NPetshop的Shopping模型
1、Petshop是很奇怪的,它可以一次買好幾隻狗,所以Item上有單價與數量。賣出後,數量會有所異動。我之所以沒把Item當成綠色,是因為它沒有狀態,一群狗會有什麼狀態?可以擁有狀態是綠色的特徵。
2、灰色的Shopping是DDD中Value Object的概念,Shopping只是Memory中的物件,一個暫時的容器。
3、CreditCard與Address一樣是Value Object的概念。
Feature
伴隨四色原型分析,是Feature Driven Development的方法論。當我們擁有一個Domain Model,就可以建立feature來描述整理我們的需求。
feature的語法如後:action result (by|for|of|to) a(n) object
feature Set的語法如後:action(ing) a(n) object,一個feature Set包含很多feature
Subject Area的語法如後:object management,一個Subject Area包含很多feature
feature Set:CheckOut Order
features:
make new Order for Shopping
assign Credit Card to Order
assign BillingAddress to Order
assign ShippingAddress to Order
decrease Quantity for Item
SpecFlow
又或者搭配BDD框架,可以寫成如下的語法,好像測試性更好
Feature: CheckOut Order
Scenario: Make new Order for Shopping
Given Price Of Koi is NT18.5
And I have buy 5 Kois into the Shopping
When I Make New Order
Then TotalPrice Of the Order should be NT92.5
程式
目前的程式架構如下,可以開始來設計系統了。