0

在分离关注点时,我有一个 SOLID 问题。在典型的三层架构(模型、视图、演示者)中,我们正在按照清洁架构方法(鲍勃叔叔)解决问题,模型/数据的组合方式是什么?这是一个典型的例子。表 Pencil 不保存是否已共享的信息,该信息存储在另一个表中 - 例如 PencilProperties。然后,当我创建域模型 - PencilModel - 设置依赖于此 PencilProperties 表的“isShared”字段的正确方法是什么?

我使用的存储库只是通过数据映射器类在 PencilDatabaseObject 和 PencilModel 之间映射数据。

另一个例子是,我们有两个对象:

Plant
 -> id
 -> name

Tree
 -> id
 -> plant_id
 -> plant_name

此时我需要在 Plant 和 Tree 之间进行映射,以便 Tree 从 Plant 实体中获取属性?此时访问数据映射器中的数据库对于 SOLID 似乎是错误的。

提前致谢。

4

1 回答 1

1

因此,在这两种情况下,PencilPencilPropertiesPlant都是Tree您的数据实体。您的存储库应负责获取数据。您的存储库是数据库、ORM 还是字典都无关紧要)。唯一重要的是你想要实现它的方式。

(请原谅 C# LINQ,但它与 Java 足够接近)因此,为了实现,您可以让存储库获取 isShared,如下所示:

var pencilIsShared = _pencilRepository.First().IsShared;

至于什么时候需要映射,简单的回答是,“在你的仓库中”

由于您Pencil的更改可能性小于PencilRepository,因此您需要反转依赖关系并确保您有一个PencilRepository接口,并且无论 a是否共享,您的PencilRepositoryImpl实现都将返回给您。Pencil

至于您对在数据映射器中访问数据库的担忧,您可以做的是在存储库中包含您的映射器逻辑,然后抽象映射器,这样您就不再违反 SRP。请参阅下面的链接。

存储库模式

这个很干净:https ://medium.com/@krzychukosobudzki/repository-design-pattern-bc490b256006

于 2017-09-26T14:14:06.843 回答