DDD服务和WCF服务有什么区别?

时间:2010-12-22 16:23:05

标签: c# wcf design-patterns domain-driven-design soa

我有一个DDD类库。在其中,我有以下结构:

> Core
> - DataAccess ( my LINQ repositories)
> - Domain ( my data objects)
> - Impl (my services)

我最近在我的解决方案中添加了一个WCF项目。这个项目会 将JSON Web方法暴露给iPhone客户端。 WCF方法是 不太复杂 - GetCustomers / GetCustomerDetails / GetAlerts GetAlertDetails / GetProblems / GetProblemDetails / GetInventory / GetInventoryDe​​tails,GetDataPoints / GetDataPointDetails / etc ......

我注意到的是,WCF中的大多数方法都是暴露的 通过我的DDD模型中的服务层。所以,我发现自己在做 很多像这样的代码:

public List<Alert> GetAlerts()
{
    AlertSerice _as = new AlertService;
    List<Alert> alerts = _as.GetAlerts();

    return alerts;
}

这对我来说不合适。我想知道我是否应该取消我的Impl文件夹(全部 DDD服务)并重新编译。然后,在我的WCF项目中添加DLL作为refcerence并编写我的代码 以前的DDD服务作为WCF方法?

WCF真的只需要Domain和DataAccess层吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

AlertSerice _as = new AlertService;
List<Alert> alerts = _as.GetAlerts();

您可能错误地使用域名服务。

在DDD中,当操作中必须涉及多个聚合根时,将使用域服务。

GetAlerts似乎是一个明显属于AlertRepository的功能(并且不仅仅属于,而是该存储库的核心功能)。

对于WCF服务,它们是公共端点。他们的工作是接收来自客户端的请求并在域或查询上执行命令。这种服务的重点通常是翻译 - 从原始类型的输入参数到DTO的输出。

答案 1 :(得分:0)

从体系结构的角度来看,使用不同的服务层来公开您的数据允许一定程度的抽象,以及对受保护和内部方法的隔离,您可以简单地插入不同的服务处理程序(服务配置)来公开二进制数据或XML格式。您需要花费时间的地方是确保明确定义抽象级别,并确保实现代码访问规则以及暴露给服务层的层之间的安全性。