MVC存储库模式/ Web服务SoC问题

时间:2010-08-26 19:26:24

标签: asp.net-mvc-2 repository-pattern

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

  1. AuthenticateCustomer - 如果有效的电子邮件/密码
  2. ,则返回客户ID
  3. GetCustomer - 返回包含客户信息的序列化对象
  4. 我的问题是,所有这些服务都会返回Success(bool)和Message(字符串)值,具体取决于操作的结果。如果发生错误,该消息包含描述性信息。我不确定Web服务的调用是否属于Repository层,但我认为能够通过Repository传递Success和Message值非常重要 - >服务 - >控制器层。我能想到这样做的唯一方法是使用out arguments乱丢Repository方法:

    public int AuthenticateCustomer(string Email, string Password, out bool Success, out bool Message);
    

    或创建某种包含预期返回值(整数)以及Success和Message值的包装器。但是,每个Web服务方法都返回不同的值,因此一个通用的包装器不起作用。此外,这些值需要通过服务层传递,似乎某种类型的验证发生在存储库级别。

    关于如何完成的任何想法: 1.分离关注点(验证,通过Web服务访问数据),同时...... 2.能否保持从Web服务收到的反馈并将其一直传递给View?

    P.S。 - 对不起简短的问题。用任何简洁来解释都有点困难。

2 个答案:

答案 0 :(得分:0)

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

让业务层将Customer对象从Web Service转换为Business对象,并将其传递给控制器​​。

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

答案 1 :(得分:0)

马丁的回答很好。

我可能会在Web服务周围看到一个薄层,以便于测试。

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