2013-12-17 63 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

相关问题