使用簡單字符串作爲查詢參數來查詢數據庫實體的好做法被認爲是一種良好做法。誰應該實現將字符串「轉換」爲實體的方法,以及誰應該調用此方法?存儲庫,實體或其他對象,就像MVC應用程序中的控制器一樣?通過自定義字符串從存儲庫獲取實體
對於更具體的例子,我有一個ASP.NET MVC 2應用程序,使用Sharp Architecture的IRepository
和SharpModelBinder
。後者的配置是這樣的,即如果用戶提交了一個表單,該表單有一個ID代替一個對象,那麼它將查詢具有相同ID的對象的相應存儲庫。我想添加到這個例子不僅能夠使用一個ID,但也是一個自定義字符串。當然,從通用查詢字符串獲取具體ID的方法對於每個Repository/Entity都是不同的。我應該怎麼做?
更加具體。假設我有兩個實體:
class Doctor : Entity {
public virtual Patient ActualPatient { get; set; };
// some other properties, constructor, etc.
}
class Patient : Entity {
// some properties, constructor, etc.
}
現在,如果我對醫生實體的編輯器(如表格),我可以代替Doctor.ActualPatient
的輸入ID和模型綁定將採取分配的護理適當的對象。但是如果用戶輸入一個自定義字符串(如Patient
的名稱)呢?
這裏是我目前的選擇:
- 控制器應藉此自定義字符串的照顧。所以後ModelBinder的不能結合的
Patient
到Doctor
(=用於Patient
返回null
)時,控制器採取串和使用一些algorythm它會嘗試獲取由該字符串表示的患者(或失敗太) - 該控制器負責的這一點,但要求被定義別的地方不是在控制器類中的方法(看下一題)
- 的ModelBinder的應配置爲使用這個外部方法
- 你不應該這樣做這,這總是被認爲是不好的做法
- 別的東西(建議,歡迎)
而且這裏是我在哪裏此方法應執行的建議:
- 存儲庫應該有一個
GetEntityFromAString(string)
方法,併爲這個倉庫的子類應該重新定義此方法。 - 實體應該有一個屬性,如果目前負責這個轉換,以及控制器/模型綁定器的/ etc這個屬性的檢查,並呼籲像
GetEntityFromAStringUsingThisRepository(string,repository)
- 的方法我已經說過,這是一個不好的做法
- 別的東西
雖然具體的例子是夏普建築/ ASP.NET MVC2/NHibernate的隨意普遍回答。
感謝您的答案。
聽起來社區維基... – RedFilter 2010-04-30 14:56:30
你爲什麼這麼認爲? – SztupY 2010-04-30 15:23:49