在域驱动设计中使用包装类来使用外部系统的api

时间:2011-04-08 10:42:22

标签: domain-driven-design

如果你想使用facebook或twitter的api,有时你必须使用第三方的服务。然后我们必须创建各种包装类,它们使用所需参数调用外部api的函数并返回所需的结果。

我的问题是在哪里放置这个包装类,在App Layer本身并创建一个服务类,它调用包装类的函数或在Infrastructure层的单独的类库中?

我是否将包装类放在INFRA LAYER或APP LAYER中?

2 个答案:

答案 0 :(得分:2)

你在这里尝试做的是写一个反腐败层。换句话说,您正试图保护您的内部域免受外部影响。

有很多方法可以做到这一点但基本上你最保持你的领域不可或缺。我们要做的是定义一个“契约”(即界面),它定义了你的域对象通常是什么。此界面在您的域中随处可用。

然后你有反腐败层代码(即你提到的包装类)。我们将这些包装类保存在名为WhateverPrefix.AntiCorruptionLayer的程序集中。包装器实现域中定义的“契约”。域不引用反腐败层程序集,但反腐败层程序集确实引用了域。

在反腐败层组件本身中,我们通常会在每个反腐败层的根目录下专用一个特定的描述性文件夹。

这个东西不是一门精确的科学,我只是概述了我在经验中看到这些东西的方法之一。希望这会有所帮助...

答案 1 :(得分:1)

我不是回答这个问题的合适人选,因为你在第一个问题中回答了这个问题:)。尽你所能,你做正确的事,并与他人核实我的答案。但我建议你也去看看不同的DDD来源和例子。他们会指出你给我的答案,但有些人做的事情有点不同。

以下是一些不错的博客,网站等。 http://stochastyk.blogspot.com/search/label/DDD 来自埃里克·埃文斯的好榜样http://dddsamplenet.codeplex.com/ http://msdn.microsoft.com/en-gb/magazine/ee236415.aspx

但我建议您阅读Jimmy Nilsson和Eric Evans关于DDD的书籍。他们指向同一个方向。将所有技术资料放在基础架构层中。保持应用层清洁。但是从app层协调对infra图层的请求。祝你好运Kamal。