2013-08-30 107 views
1

我是MVC WebAPI和EF4的新手。我想知道是否最好將多個GET和/或PUT方法的大型控制器拆分爲多個控制器,以避免「找到與請求匹配的多個操作」錯誤。我更喜歡只使用基於VERB的路由模式「api/controller/id」,如下所示。asp.net webapi控制器的設計考慮因素

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
"Api", 
"api/{controller}/{id}", 
new { id = RouteParameter.Optional } 
); 

例如,我有兩個域對象Doctor和Patient。一個ClinicController有下列行爲:

getDoctors() 
getPatientCohort(int doctorId) 
getPatientPrimaryDr(int patientId) 
getPatientDoctors(int patientId, int clinicId) 
getPatients() 
getPatient(int patientId) 
putDoctor(Doctor doctor) 
putPatient(Patient patient) 
createDoctor(Doctor doctor) 
createPatient(Patient patient) 

如果我這個控制器分成DoctorController和PatientController使每個控制器只與一個域對象的交易。由於Patient Cohort是一個關聯類,應該getPatientCohort(int doctorId)是PatientController還是DoctorController的方法?謝謝。

回答

0

在我看來(我明確指出這一點),你應該爲每個模型創建單獨的控制器。這實際上取決於行爲本身的目的,但我可以猜測其意圖並粗略地將其分開。

Put和Create方法應該駐留在它們自己的控制器中,因爲這(同樣,我假設)與診所無關。患者和醫生只是創建或更新(替換),這在他們自己的控制器中是完美無缺的。如果病人或醫生被分配到診所,應在診所控制器內單獨採取行動。

以Patient模型爲基礎並檢索關聯模型的任何操作也應駐留在PatientController中;類似於Doctor模型。

所以它在本質上歸結爲:

  • 任何型號的具體行動應在該模型的控制器。
  • 檢索關聯模型的任何模型特定操作都應駐留在主模型的控制器中。
  • 任何綁定操作都可以駐留在將兩者綁定在一起的控制器中。

這與OData框架處理動作和關聯的方式類似,因此我更習慣於以這種方式實現它。希望這會爲你解決一些問題(或者至少提供一些指導方針)。