我的个人学习项目(不是家庭作业):
许多机器人需要解决迷宫问题。我需要不断打印迷宫 使用机器人,每个机器人都需要知道它在迷宫中的位置
所以我创建了类 Land 来定义机器人可以行走的迷宫墙和空间的x,y。显然我需要上课机器人。
但是,我需要知道土地中机器人的确切位置(x,y),机器人需要看土地,以确定它可以走向哪个方向。我们可以看到,域模型具有很高的双边依赖性。
可以在两个域模型中注入依赖关系,并且这两个域都有很多相互依赖的逻辑吗?例如: Land 有机器人阵列,机器人 Land 对象,以告知它在移动后的地图。
或者我是否需要创建另一个图层,并在单个类(任何名称建议?)中接收ILand和IRobot,并使所有逻辑相互依赖?
有一个最好的解决方案吗? (请记住,我无法改变方案)
我希望有一个没有其他层的解决方案,因为它似乎过度设计了这个简单的项目,而且服务层不能有这么多的业务逻辑,而且我不是在寻找贫血模型,但域之间的这些高依赖性困扰着我,我想知道这是否正常。
答案 0 :(得分:1)
我建议引入一个概念“障碍”来消除双向依赖。
迷宫和障碍物(也许是墙壁)在同一个包装中。因此,Robot依赖于包(与Maze关联,实现Obstacle),但反之亦然。
答案 1 :(得分:1)
如果你想使用依赖性反转进行解耦,那么它既不对也不错。你需要做自己喜欢的事情。但是,您可能会遇到解耦是真正必要的情况。在给定的场景中,似乎所有这些都属于一起。
如果您最终得到类似Maze
的内容,可以拥有各种不同的“居民”,并且您需要具有可扩展性,那么您可以重构为IInhabitant
之类的内容。
因此,如果你知道你不会有一个固定的结构,而是一些更具可扩展性的东西,那么你最好不要使用接口。接口也可以帮助测试,并且这样做可以突出显示您需要的其他一些抽象,例如:运动。