我在分开关注方面有一个可靠的问题。在典型的三层体系结构(模型,视图,演示者)中,我们正在以干净的体系结构方法(Bob叔叔)处理问题,模型/数据的组合方式是什么?这是一个典型的例子。桌子铅笔不容纳信息是否已共享,该信息存储在另一个表中 - 例如,PencilProperties。然后,当我创建域模型-PencilModel时 - 设置其" ISSHARED"字段的正确方法是什么?
我正在使用仅通过数据映射类别的PencildatabaseObject和PencilModel映射数据的存储库。
另一个例子是,我们有两个对象:
Plant
-> id
-> name
Tree
-> id
-> plant_id
-> plant_name
我需要在植物和树之间进行映射,以便树从植物实体中获取特性?此时访问数据映射器中的数据库似乎是错误的。
预先感谢。
因此,在这两种情况下,Pencil
,PencilProperties
,Plant
和Tree
都是您的数据实体。您的存储库应负责获取数据。您的存储库是数据库,ORM还是字典都无关紧要。唯一重要的是您要实施它的方式。
(请原谅C#LINQ,但与Java足够接近)因此,对于实施,您可以让存储库简单地获取ISSHARED作为:
var pencilIsShared = _pencilRepository.First().IsShared;
至于您需要映射时,简单的答案是"在您的存储库中"
由于您的Pencil
比PencilRepository
更改的可能性较小,因此您需要倒置依赖项并确保您具有PencilRepository
接口,并且您的PencilRepositoryImpl
实现将是返回您是否共享Pencil
的实现。
对于您担心访问数据映射器中数据库的关注,您可以做的是将映射器逻辑包括在存储库中,然后抽象映射器,以便您不再违反SRP。请参阅下面的链接。
存储库模式
这个非常干净:https://medium.com/@krzychukosobudzki/repository-design-pattern-bc490b256006