我有一个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 / GetInventoryDetails,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层吗?
提前致谢。
答案 0 :(得分:1)
AlertSerice _as = new AlertService;
List<Alert> alerts = _as.GetAlerts();
您可能错误地使用域名服务。
在DDD中,当操作中必须涉及多个聚合根时,将使用域服务。
GetAlerts似乎是一个明显属于AlertRepository的功能(并且不仅仅属于,而是该存储库的核心功能)。
对于WCF服务,它们是公共端点。他们的工作是接收来自客户端的请求并在域或查询上执行命令。这种服务的重点通常是翻译 - 从原始类型的输入参数到DTO的输出。
答案 1 :(得分:0)
从体系结构的角度来看,使用不同的服务层来公开您的数据允许一定程度的抽象,以及对受保护和内部方法的隔离,您可以简单地插入不同的服务处理程序(服务配置)来公开二进制数据或XML格式。您需要花费时间的地方是确保明确定义抽象级别,并确保实现代码访问规则以及暴露给服务层的层之间的安全性。