蠶繭表示法

蠶繭表示法

蠶繭表示法 是用於軟體設計領域的一種易理解易書寫的數據結構表示方法,蠶繭喻意一個多層次的複雜對象,然後像抽絲剝繭一樣層層剝開這個對象的內部結構,常用於數據建模,接口描述,代碼注釋等。

概念

一種易理解易書寫的數據結構表示方法,像抽絲剝繭一樣層層剝開一個多層次的像蠶繭一樣的複雜對象,常用於數據建模,接口描述,代碼注釋等。

下面將以實例的方式描述表示規則,並且給出了Javascript和C++兩種實現供參考。

對象

也稱為結構體(structure)或類(class).

一個對象Customer,有兩個欄位(或稱屬性)id和name,則可以表示為

左側是類型名(type name),一般用大寫字母開頭。右側是類型描述,使用花括弧描述對象類型,形式為{field1, field2, ...}, 括弧內是各屬性名,以小寫字母開頭。

Javascript中該對象像這樣:

而C++中會這樣定義結構:

對象中可包含複雜類型的屬性,屬性名中使用前綴"%"標明結構體或字典,用前綴"@"標明數組,如:

Customer對象的屬性address是一個結構體,用前綴"%"標明;屬性orders是一個數組,用前綴"@"標明。 這裡屬性address和orders沒有定義類型名,這意味著類型名與屬性名同名,即屬性address的類型為Address, 而orders的類型為Orders。 因為類型Orders未定義,但定義了其單數形式Order類型,這隱含著Orders是Order的數組。 如果寫完整則應像這樣描述:

將Order放在中括弧中,即表示屬性orders是Order類型的數組。 Order類型的屬性lines描述為

表示它是OrderLine的數組。

屬性可以預設,還可指定預設值,如:

這表示屬性country可以沒有,如果沒有的話則當作值為"CN"。

字典

它是一個集合,其中每一項是一個鍵值對(key-value pair)。也稱哈希表(hash table)或映射表(map)。

使用花括弧描述字典,形式為{key => value},其中value可以是基本類型或複雜類型。 字典類型的命名應使用複數形式,或以"List", "Map"結尾,如:

上面定義表示,Customers是一個字典類型,每一項中主鍵表示id欄位,而值表示name欄位(基本類型)。

在Javascript中的字典類型像這樣:

注意:雖然與對象類型形式上一樣,但含義完全不同。它是對象的集合,名稱也是複數形式。

在C++中一般這樣定義:

字典中每項的值也可以是一個對象,表示為:

或可以合併為:

在Javascript中使用:

在C++中可以這樣定義類型:

數組

又稱順序表或列表。

使用中括弧描述數組,形式為[ element ]。命名時應使用複數形式,或以"List", "Arr"結尾。

要表示一個簡單的列表IdList,它的每個元素是一個id,可以表示為

Customers是Customer的數組,可以表示為:

或合併為:

在Javascript中數組類型的變數:

在C++中類型常定義為:

如果定義了Customer, 而沒有定義複數形式Customers, 則默認Customers是它的數組;反之,如果定義了複數形式Customers/CustomerList/CustomerMap/CustomerArr, 則Customer可以不定義,默認它是前者集合中的值元素。

有時可以用數組替代對象類型,比如Customer有兩個元素,第一個是id, 第二個是name, 則可以表示為:

用數組定義對象時,形式為[ field1, field2, ... ], 它至少應有兩個欄位。

在Javascript中的例子:

在C++中一般不這樣設計,非要用的話也可以用Variant之類的通用類型:

基本類型描述

一個複雜類型最終應分解到它所有的屬性,要么是基本類型,要么是已分解到基本類型的複雜類型。

在定義屬性時,應通過屬性名暗示類型,或通過後綴標識符標明。規則如下:

•Integer: 後綴標識符為"&", 或以"Id", "Cnt"等結尾, 如 customerId, age&

•Double: 後綴標識符為"#", 如 avgValue#

•Currency: 後綴標識符為"@", 或以"Price", "Total", "Qty", "Amount"結尾, 如 unitPrice, price2@。

•Datetime/Date/Time: 分別以"Tm"/"Dt"/"Time"結尾,如 tm 可表示日期時間如"2010-1-1 9:00",comeDt 只表示日期如"2010-1-1",而 comeTime只表示時間如"9:00"

•Boolean/TinyInt(1-byte): 以Flag結尾, 或以is開頭.

•String: 未顯示指明的一般都作為字元串類型。

在根據設計實現時,應將上述類型對應到所用程式語言所支持的實際類型。

例如以下定義:

簡明地定義了Customer各屬性的基本類型,在使用C++定義類型時,可能是這樣:

相關詞條

熱門詞條

聯絡我們