目標(biāo)
這個工具的目標(biāo)是能夠在項目初期快速搭建一個“數(shù)據(jù)提供器”,快速的為前端提供數(shù)據(jù)支撐,從而方便項目定型;當(dāng)然,或許這不是一個正確的開發(fā)流程。不過存在決定方法,這里不討論理想情況?;谶@個目標(biāo),目前有兩種方式:
- 基于“倉儲”的“偽實現(xiàn)”。由于項目框架中進行了倉儲隔離,所以可以考慮為倉儲提供一個“數(shù)據(jù)池”,在忽略業(yè)務(wù)的情形下快速提供數(shù)據(jù)?;贗oC的思想,這種實現(xiàn)中,業(yè)務(wù)層必須不曉得“假數(shù)據(jù)”的存在。所以不能讓和這個組件相關(guān)的任何信息、任何代碼傾入業(yè)務(wù)。也就是說,不能使用聲明式的方案,得使用類似于EF的Map的方案。
- 基于“應(yīng)用程序?qū)印钡摹皞螌崿F(xiàn)”。第一個方案的缺點是仍然不夠快,需要編寫一定量的代碼。所以第二個方案的特點是,全部基于Attribute聲明,快速確定前后端需要傳輸?shù)臄?shù)據(jù)類型。因為這些定義的數(shù)據(jù)類型屬于DTO,也沒有必要去清理這些定義好的Attribute——而且,如果設(shè)計得當(dāng)?shù)脑?,完全可以將這些Attribute作為數(shù)據(jù)驗證的依據(jù)。
選擇
總的來說就是兩個選擇,要么自己實現(xiàn),要么站在前人的基礎(chǔ)上調(diào)整。
在Nuget上搜索了下Data Generater,發(fā)現(xiàn)不少的匹配項。找了其中一個下載量比較大的:
細看了下文檔,感嘆群眾的眼睛果然是雪亮的。
擴展
Bogus完全符合[目標(biāo)]這一節(jié)的第一點要求,但是沒有發(fā)現(xiàn)基于Attribute的使用方式。所以決定自己擴展下。Bogus的配置入口是一個泛型類:Faker<>,配置方法是RuleFor,這個方法包含了2個重載,而且都是兩個參數(shù)的。第一個參數(shù)都是一個MemberAccess的Lambda Expression,這個參數(shù)指示了你希望針對哪個屬性配置。第二個參數(shù)是一個委托,指示了你希望如何返回值。該組件的Faker(非泛型)類型提供了豐富的數(shù)據(jù)提供方式。這也是這個組件最大的價值所在。以下是摘自GitHub的幾個例子:
var testUsers = new Faker<User>() //Optional: Call for objects that have complex initialization .CustomInstantiator(f => new User(userIds++, f.Random.Replace("###-##-####"))) //Ba