我是ASP.NET MVC的新手,我正在尝试为使用Web服务作为其数据源的中小型应用程序实现最佳实践。 Web服务公开以下方法以支持该应用程序:
我的问题是,所有这些服务都会返回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。 - 对不起简短的问题。用任何简洁来解释都有点困难。
答案 0 :(得分:0)
您需要存储库吗?根据您的描述,我将Web服务视为存储库。然后,我将使用服务(业务层)来调用Web服务,并使其中的逻辑处理错误或成功。
让业务层将Customer对象从Web Service转换为Business对象,并将其传递给控制器。
存储库(Web服务) - >服务(业务层) - >表示层(控制器)
答案 1 :(得分:0)
马丁的回答很好。
我可能会在Web服务周围看到一个薄层,以便于测试。
如果你确实走了那条路线并且Success = false不是常见的情况,那么你可以抛出一个自己类型的例外,其中包含Success和Message。如果真的是特殊情况,我只会这样做。如果您发现业务层捕获异常只是为了将错误代码返回到表示层,那么这是错误的方法。