Asp.net mvc 2 MVC存储库模式/Web服务SoC问题

Asp.net mvc 2 MVC存储库模式/Web服务SoC问题,asp.net-mvc-2,repository-pattern,Asp.net Mvc 2,Repository Pattern,我是ASP.NET MVC新手,我正在尝试为使用web服务作为数据源的中小型应用程序实施最佳实践。web服务公开以下方法以支持应用程序: AuthenticateCustomer-如果电子邮件/密码有效,则返回客户ID GetCustomer-返回包含客户信息的序列化对象 等 我的问题是,所有这些服务都会根据操作的结果返回Success(bool)和Message(string)值。如果发生错误,该消息包含描述性信息。我不确定web服务的调用是否属于存储库层,但我认为能够通过存储库->服务->控

我是ASP.NET MVC新手,我正在尝试为使用web服务作为数据源的中小型应用程序实施最佳实践。web服务公开以下方法以支持应用程序:

  • AuthenticateCustomer-如果电子邮件/密码有效,则返回客户ID
  • GetCustomer-返回包含客户信息的序列化对象
  • 我的问题是,所有这些服务都会根据操作的结果返回Success(bool)和Message(string)值。如果发生错误,该消息包含描述性信息。我不确定web服务的调用是否属于存储库层,但我认为能够通过存储库->服务->控制器层向上传递成功和消息值很重要。我能想到的唯一方法是在没有参数的情况下乱扔存储库方法:

    public int AuthenticateCustomer(string Email, string Password, out bool Success, out bool Message);
    
    或者创建某种包装,其中包含预期的返回值(整数)以及Success和Message值。但是,每个web服务方法都返回不同的值,因此“一刀切”包装器无法工作。此外,这些值需要通过服务层向上传递,而且似乎在存储库级别正在进行某种验证

    关于如何实现以下目标的任何想法: 1.分离关注点(验证、通过web服务访问数据),同时。。。 2.是否能够维护从web服务收到的反馈并将其一直传递到视图


    顺便说一下-很抱歉问了这么简单的问题。这有点难以简单地解释。

    您需要存储库吗?根据您的描述,我将Web服务视为存储库。然后,我将使用服务(业务层)调用Web服务,并让其中的逻辑处理错误或成功

    让业务层将Web服务中的Customer对象转换为业务对象,并将其传递给控制器


    存储库(Web服务)->服务(业务层)->表示层(控制器)

    Martin的答案很好

    我可能认为有必要在web服务周围设置一个薄层,以方便测试


    如果您确实这样做了,并且Success=false不是常见的情况,那么您可以抛出一个您自己类型的异常,并将Success和消息包装在其中。我只会这样做,如果它真的是一个例外情况。如果您发现业务层捕获异常只是为了向表示层返回错误代码,那么这是错误的方法。

    Martin,您的响应是有意义的。正如我所想的那样,我的应用程序既不“拥有”数据,也不负责将数据维护到持久性存储(web服务处理此问题),因此不需要显式存储库。谢谢你的意见。罗布,这就是我在设计这个时遇到的问题。我能够在服务层上执行一些验证,但是web服务中内置了一些业务规则,我无法在业务层中处理这些规则。例如,有一项服务允许客户更改其登录名(电子邮件)。web服务验证新登录名是否已被其他客户使用。重要的是,服务层要捕获该反馈,然后将其呈现给用户。这“感觉”非常错误,但我正在努力找出更好的方法来处理它。