想象一個假想的對象有一些屬性:何處存儲值,以便傳送到業務層?
僞代碼:
class Student
{
Name: String;
Birthdate: DateTime;
Height: int; //inches
GPA: float; //"Grade Point Average"
Citizenship: string;
}
現在,用戶在值進入,目標讓他們:
名稱:Shelby Lake
生日:6/19/1991
身高:63
GPA: 5.6
國籍:United States
,並與所有的商業邏輯層可以驗證它:
BusinessLayer.ValidateStudent(student);
在這個例子中它可以,例如,拋出一個異常:
ClientException
GPA cannot exceed 4.00 (5.60)
好,很好。但是,並非一切都在用戶類型可以 「適合」 的對象中:
名稱:Shelby Lake
生日:19 years ago
身高:5'3
GPA:n/a
國籍:n/a
事實上,我們的用戶可以在商業決策中輸入更友好的價值。與此同時,全球商業規則決定了某些輸入是否有效,例如
GPA:5.6
(無效)
GPA:n/a
(有效)
國籍:n/a
(有效)
國籍:(無效)
身高:tall
(無效)
身高:5'3
(有效)
我的問題是,我在哪裏存儲這些string
值,因爲我無法將它們純粹存儲在對象中。他們需要到達業務層,該層知道如何將輸入的文本解析爲值。
我首先想到的是改變類:
class Student
{
Name: String;
Birthdate: DateTime;
BirthdateFreeForm: string;
Height: int; //inches
HeightFreeform: string;
GPA: float; //"Grade Point Average"
GPAFreeform: string;
Citizenship: string;
}
這使得更多的任意值被髮送到業務層:
名稱:Shelby Lake
BirthdateFreeform:19 years ago
HeightFreeform: 5'3
GPA:4.6 Citizenship:n/a
BusinessLayer.ValidateStudent(student);
而業務層可以自由格式值轉換爲規範的值,報告任何錯誤:
ClientException
Country of citizenship must be entered ("n/a")
但是,這似乎是這樣的醜陋答案我甚至不想考慮它。
用業務規則解析用戶輸入的企業方法是什麼?
+1光滑....... – 2010-08-16 20:24:50