2010-06-18 74 views
7

我想知道是否爲SelectList設置默認值被認爲是表示邏輯或業務邏輯?例如,如果要求員工無法在沒有位置的情況下保存,但99%的時間將選擇的位置是特定項目 - 比如說亞特蘭大。因此,當顯示新員工的輸入屏幕時,SelectList應該默認爲亞特蘭大。我應該默認在模型中還是在視圖模型中的位置?有一兩件事,我意識到的是,單元測試變得尷尬,因爲在這兩種情況下,我不得不再次進行測試,將永遠是目前在生產中的位置,但我不能創建一個單元測試用我自己的測試數據,除非「亞特蘭大」號在測試中使用的一組位置中。如果您對此有任何想法,我會非常感激。設置默認值 - 表示邏輯或業務邏輯?

回答

4

與許多這樣的問題(主觀)一樣,答案是:「這取決於」。

如果「默認值」是一個商業默認值(比方說,一個企業位置的默認位置,或組的訂單,或諸如此類的默認號碼),這可能是業務層。這對你在這裏的具體情況似乎是正確的。但是,如果列表的「默認值」僅僅是因爲您需要一些值作爲默認值,而您只是選擇索引0,或者只是根據用戶的位置或系統進行選擇設置,我想這些會是表現層問題。

+0

如果默認值在我的員工模型中,那麼我是不是必須硬編碼默認位置的名稱。 例如 私人位置的位置; 公共地點{ 得到 { 如果(位置== NULL) 位置=新的位置(1, 「亞特蘭大」,...) 回報位置; } set {location = value; } 這是可以接受的嗎? – SideFX 2010-06-18 19:23:48

+0

我可以使用註冊表模式來協調我對硬編碼默認值的事實。但在這種情況下的位置不是參考數據,因爲用戶可以添加新的數據。 – SideFX 2010-06-18 19:25:43

0

我還以爲默認值是業務邏輯。

例如,如果公司搬遷的默認位置不再是「Altanta」或「倫敦」,但「紐約」或「諾丁漢」。

3

因此,當顯示新員工的輸入屏幕時,位置SelectList應默認爲Location5。我應該默認在模型中還是在視圖模型中的位置?

這是您的示例中的業務邏輯,但這並不會阻止您在此情況下擁有您的蛋糕並進食它。該模型可以指定一個默認值;視圖然後用這個默認值初始化它自己。

一般來說,東西是否是「商業邏輯」或「表示邏輯」取決於它是否涉及域或沒有。例如,將日期下拉的最早的一年設置爲1900年,可能是一個關於演示的問題。但它也可能是一個企業的關注,如果系統沒有設計更早接受日期比1900年

一兩件事,我意識到的是,單元測試變得尷尬,因爲在這兩種情況下,我會強迫測試將始終存在於生產中的位置,但我不能用我自己的測試數據創建單元測試,除非在測試中使用的位置集合中包含「亞特蘭大」。如果您對此有任何想法,我會非常感激。

隨着我上面提到的策略,單元測試是容易的。簡單地驗證:

  • 模型提供一個默認值
  • 認爲接受此默認值
  • 視圖初始化自己這個默認值
  • 視圖有相應的行爲是否屬於模型耗材價值
0

如果您確實擔心保留業務規則和表示層的邊界,您可以通過業務邏輯提供默認值,並且表示層可以使用該默認值來初始化控件。