2010-08-26 100 views
0

我是ASP.NET MVC的新手,我试图为使用Web服务作为其数据源的中小型应用程序实现最佳实践。该Web服务公开下面的方法来支持应用程序:MVC存储库模式/ Web服务SoC问题

  1. AuthenticateCustomer - 如果有效的电子邮件/密码
  2. GETCUSTOMER返回客户ID - 返回一个包含客户信息
  3. 等序列化对象

我的问题是,所有这些服务返回成功(布尔)和消息(字符串)值取决于操作的结果。如果发生错误,该消息包含描述性信息。我不确定Web服务的调用是否属于Repository层,但我认为能够通过Repository - > Service - > Controller层传递Success和Message值是非常重要的。我能想到这样做的唯一方法是要么弃置垃圾的输出变量的存储库的方法:

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

或建立某种形式的包装,它包含了预期的返回值(整数),并且成功和消息值。但是,每个Web服务方法都会返回不同的值,因此一个通用包装器将无法工作。另外,这些值需要通过服务层传递,并且似乎在存储库级别正在进行某种类型的验证。

就如何完成任何想法: 1.分离的关注(验证,通过Web服务的数据访问),而... (二)具有保持从Web服务收到的反馈意见,并通过它通过所有的能力视图的方式?

P.S. - 对于简洁的问题抱歉。用任何简短的方式解释都有点困难。

回答

0

您是否需要知识库?从你所描述的,我正在查看Web服务作为存储库。然后,我将使用服务(业务层)来调用Web服务,并让其中的逻辑处理错误或成功。

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

库(网络服务) - >服务(业务层) - >表示层(控制器)

+0

Martin, 您的回答是有道理的。正如我想到的那样,我的应用程序没有“拥有”数据,也没有责任将数据维护到持久性存储(Web服务处理该数据),因此不需要显式存储库。 感谢您的输入。 – Ariel 2010-08-29 18:29:35

0

马丁的回答是好。

我可能会看到围绕Web服务的薄层情况以便于测试。

如果你走的路线和Success = false不是一个常见的条件,你可以抛出一个包含成功和消息的自己类型的异常。如果真的是一个特殊的情况,我只会这样做。如果您发现您的业务层捕获异常仅仅是为了向表示层返回错误代码,那么这是一种错误的方法。

+0

Rob, 这是我在设计时遇到的问题。我能够在服务层上执行一些验证,但是在我的业务层中无法处理Web服务中内置的业务规则。例如,有一项服务允许客户更改其登录名(电子邮件)。 Web服务验证新登录尚未被其他客户使用。这个反馈被服务层捕获并呈现给用户很重要。它“感觉”非常错误,但我正在努力想出一个更好的方法来处理它。 – Ariel 2010-08-29 18:33:52