2013-12-17 57 views
3

我的應用程序有MVC控制器和WebApi控制器。到目前爲止,我已經能夠將控制器之間共享的任何邏輯分別推送到BaseControllerBaseApiController在WebApi和MVC控制器之間共享邏輯?

現在我有一種情況,API控制器和MVC控制器都在做同樣的事情 - 註冊一個新的用戶帳戶。這個過程有點複雜,因爲我有一個多租戶應用,看起來是這樣的:

// MVCController : BaseController 
public ActionResult Register(RegisterModel model) { 
     // see if the model is valid 
     // check and make sure the credentials check out with policy requirements 
     // add the user to the user table if they aren't already there 
     // create a tenancy 
     // assign cookie 
} 

大多數的實際工作推離到服務層,但通​​話和條件佔用約20我寧願不復制並粘貼到類似的WebApi控制器中的代碼行。

所以我想知道如果我能以某種方式讓我的BaseControllerBaseApiController繼承自一個通用控制器,我可以把這個認證代碼。這裏推薦的方法是什麼?

回答

4

除非我從你的問題中遺漏了一些東西,否則我會將這段代碼重構成一個生活在你的UI項目中的Util類。然後你的MVC控制器和WebAPI控制器都可以調用它。

此方法符合Composition over inheritance design principle

+0

是的,我將賬戶註冊碼拉入另一個班級/界面,以便重新使用它。如果你爲它定義一個接口,你會讓你的代碼更加可測試,並且與控制原理的反轉一致。 –

0

如果你不能將邏輯移出它自己的庫,然後分享它,那麼我可能會看到有關從mvc調用web api的問題。看到這個帖子的例子就是這樣做的:https://stackoverflow.com/a/13206631/426422

+0

是的......我絕對不喜歡把它推入自己的庫,*或*將呼叫推入HTTP領土的想法。我寧願只複製代碼,如果這些是我的唯一選擇:/ – RobVious

+0

你擔心什麼? –

+0

第一種方法的解決方案開銷,第二種方法的性能。我知道這是最小的,但我寧願重複代碼,而不是添加一堆毫秒。我瘋了嗎? – RobVious

相關問題