2010-12-22 209 views
1

我有一个DDD类库。其中,我有以下结构:DDD服务和WCF服务有什么区别?

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

我最近在我的解决方案中添加了一个WCF项目。这个项目将 暴露JSON网络方法到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作为一个推导,并将我的 先前的DDD服务编写为WCF方法?

WCF是否真的只需要Domain和DataAccess层?

在此先感谢。

回答

0

从使用不同的服务层,以露出数据架构的角度允许抽象用于保护和内部方法的水平,和分离,可以在不同的服务处理程序(服务配置)简单地插入,以暴露在所述数据二进制或XML格式。您需要花费时间的地方是确保抽象层次得到明确定义,并确保代码访问规则和暴露于服务层的层之间的安全性得到实施。

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

看起来您可能正在错误地使用域服务。

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

GetAlerts似乎是功能,在AlertRepository明显属于(不只是属于,但是是仓库的核心功能)。

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

相关问题