【问题标题】:Where should these classes/methods go?这些类/方法应该去哪里?
【发布时间】:2011-06-14 07:15:27
【问题描述】:

我有这样的结构

WebUI 项目 - 控制器、视图 框架项目——存储库、服务层和域

所以现在我有 3 个方法/类

  1. 打开 ID/打开身份验证

一开始我以为我会把我所有的逻辑放在我的框架项目中的一个服务层中(准备请求、检查响应等都在这个层中)。

所以现在我正在使用 dotnetopenauth 库,因为我需要在我的控制器中使用 AsActionResult 方法(我从我的服务层返回“OutgoingWebResponse”,因为我不希望我的服务层中有任何 MVC)

当我决定在我的服务层中不包含任何 MVC 时,我开始思考。正如我所读到的,包含业务逻辑的服务层不应具有任何依赖项,例如 MVC 引用,因为如果您使用 Windows Phone 应用程序,则不应使用 MVC 的东西。

您的业务层应该是任何应用程序的即插即用。

所以现在我不确定是否应该出于上述原因将我为 openId 编写的内容移动到我的 mvc 项目中的模型文件夹中。因为如果我确实使用 Windows Phone 应用程序或表单应用程序,我将不会使用 dotnetopenauth,因为我认为这些类型的应用程序不支持它。

  1. 我的第二个是表单身份验证。再次与上述几乎相同的原因。这是否应该在我的模型文件夹中作为本地服务/repo 层(即在同一个项目文件中)。

  2. 我正在使用 nhibernate、流利的 nhiberate 和 ninject。我的回购都在我的框架项目中。所以我当然有所有的参考资料。但由于我使用 ninject 进行 ioc,所以我的 webui 项目中也有所有引用。

我不知道是否可以更改这个以从我的 webui 中删除这些引用。我想不,因为他们我不能在我认为应该去的 webui 中拥有我的 ioc。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 service-layer


    【解决方案1】:

    作为一般经验法则,您不应该针对不存在的要求编写代码(将应用程序移植到 windows phone)。

    通常您会在服务层中将其抽象出来,但是 OAuth 或 Facebook 集成会带来问题,因为它依赖于 http 并且能够访问身份验证站点。

    您将遇到的问题是因为“all abstractions are leaky”是您的服务层将被 openauth 注册过程以某种方式损坏,无论您将其放置在何处。有关用户注册和登录的详细信息(例如他们的 openid url 是什么)最终会出现在您的数据库中。您的 service/repo/db/model/mvc/viewmodel/controllers 类都将知道 openauth 是什么,因为它的性质。

    好消息是这些基于浏览器的身份验证策略可以存在于 Windows 窗体、WPF 或 Silverlight 应用程序中。您只需在应用程序内打开浏览器,而不是使用 MVC 进行本机重定向。

    所以我建议将您的 dotnetopen 身份验证注册代码放在您的服务层内,并实际抽象出重定向和回调过程是如何发生的。

    类似:

    public interface IOpenAuthRedirect
    {
          public void Redirect( url )
          public void ParseCallback( url )
    }
    
    
    public class MVCOpenAuthRedirect
    {
         public void Redirect(url)
         {
            HttpContext.Current.Response.Redirect(url);
         }
    }
    
    public class SilverlightOpenAuthRedirect
    {
        public void RedirectUrl( url )
        {
            SomeBrowserControl.IForgetTheCallToRedirect( url );
        }   
    
    }
    

    现在不同的实现细节很灵活,您可以轻松过渡到 MVC 之外的另一个平台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2011-04-20
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多