在我的特定方案中使用域模型依赖项的最佳方法

时间:2014-04-09 17:31:08

标签: architecture domain-driven-design

我的个人学习项目(不是家庭作业):

  

许多机器人需要解决迷宫问题。我需要不断打印迷宫   使用机器人,每个机器人都需要知道它在迷宫中的位置

所以我创建了类 Land 来定义机器人可以行走的迷宫墙和空间的x,y。显然我需要上课机器人

但是,我需要知道土地机器人的确切位置(x,y),机器人需要看土地,以确定它可以走向哪个方向。我们可以看到,域模型具有很高的双边依赖性。

  1. 可以在两个域模型中注入依赖关系,并且这两个域都有很多相互依赖的逻辑吗?例如: Land 机器人阵列,机器人 Land 对象,以告知它在移动后的地图。

  2. 或者我是否需要创建另一个图层,并在单个类(任何名称建议?)中接收ILand和IRobot,并使所有逻辑相互依赖?

  3. 有一个最好的解决方案吗? (请记住,我无法改变方案)

  4. 我希望有一个没有其他层的解决方案,因为它似乎过度设计了这个简单的项目,而且服务层不能有这么多的业务逻辑,而且我不是在寻找贫血模型,但域之间的这些高依赖性困扰着我,我想知道这是否正常。

2 个答案:

答案 0 :(得分:1)

我建议引入一个概念“障碍”来消除双向依赖。

enter image description here

迷宫和障碍物(也许是墙壁)在同一个包装中。因此,Robot依赖于包(与Maze关联,实现Obstacle),但反之亦然。

答案 1 :(得分:1)

如果你想使用依赖性反转进行解耦,那么它既不对也不错。你需要做自己喜欢的事情。但是,您可能会遇到解耦是真正必要的情况。在给定的场景中,似乎所有这些都属于一起。

如果您最终得到类似Maze的内容,可以拥有各种不同的“居民”,并且您需要具有可扩展性,那么您可以重构为IInhabitant之类的内容。

因此,如果你知道你不会有一个固定的结构,而是一些更具可扩展性的东西,那么你最好不要使用接口。接口也可以帮助测试,并且这样做可以突出显示您需要的其他一些抽象,例如:运动。