WCF服务和业务逻辑

时间:2011-12-05 16:43:23

标签: wcf business-logic business-logic-layer

我不确定在哪里放置我的业务逻辑。我有一个WCF服务,它的方法暴露给我的客户端。

我的业务逻辑是否应该采用服务方法

public User GetUser(int id)
{  
     //Retrieve the user from a repository and perform business logic
     return user;
}

或者它应该在一个单独的类中,每个WCF服务方法将依次调用业务层方法。

public User GetUser(int id)
{  
     return _userLogic.GetUser(id);
}

5 个答案:

答案 0 :(得分:8)

我个人的偏好是将WCF作为一个非常薄的层放在单独的业务层之上。 WCF层只是调用业务层,类似于您在选项2中显示的内容。如果您希望业务层被WCF客户端以外的其他方式使用,则可以提供一些灵活性(例如,一个直接调用业务层而不是通过WCF调用业务层的WPF应用程序。

答案 1 :(得分:2)

默认情况下,WCF服务已经设计为可重用。我认为没有理由不在您的服务中使用某些逻辑,但请记住单一责任原则之类的内容,这样您就不会得到一项可以执行十几项操作的服务。

即使这样,如果你最终将你的功能分成更小的类,那么将这些类作为WCF服务托管也不是一个坏主意。然后,您可以在需要时或跨机器边界(tcp)或甚至作为Web服务在进程内(通过管道)使用它们。根据需要创建外观,以提供对其他较小服务的功能的访问。

没有必要避免在WCF服务类中放置任何逻辑。

答案 2 :(得分:2)

我认为决定取决于您的业务需求。 WCF是一种在服务器和客户端之间传输数据(对象)的机制。如果您希望businsess逻辑在服务器上运行,则应该让WCF在运行业务逻辑后公开该对象。

答案 3 :(得分:1)

它应该放在一组单独的类中。您的WCF层应该只包含与服务产品交付方式直接相关的逻辑。

在你的情况下,我看到你有一个返回User的WCF方法(我假设这是一个自定义类)为什么有一个单独的方法来返回UserID而不是在返回User对象时填充该属性?

答案 4 :(得分:0)

对于重用/可测试性/维护/可读性,您应始终将BL放在单独的层中。