【问题标题】:Structuring a Data Access Layer构建数据访问层
【发布时间】:2019-07-31 04:21:43
【问题描述】:
对于我的应用程序,我正在考虑使用 ORM,目前正在尝试确定域层是否应该通过数据访问对象、存储库或其他方式与其交互?我很犹豫将 ORM 与存储库配对,因为如果 ORM 实体与域对象相同,它们可能会变得多余,但拥有一个大的 DAO 似乎很笨拙。我想保持我的 SQL 集中,但我不知道这些选项中的哪一个(如果有的话)最有意义。对合适的设计模式有什么建议吗?
【问题讨论】:
标签:
orm
architecture
repository-pattern
data-access-layer
【解决方案1】:
这是非常基于意见的,但我倾向于从我的领域模型中创建单独的实体。域模型需要与您的域密切匹配,而您的实体需要对您的存储进行密切建模。它们最初可能非常匹配,并且看起来确实是多余的,但它们通常很快就会彼此显着偏离。
话虽如此,除了将域实体映射到持久性实体之外什么都不做的包装器通常感觉很糟糕,而且是在浪费大量时间。此外,直到游戏后期,当您进行重构并且您意识到您的域并不完全正确时,它才会得到回报,但您不想修改持久性层。
好消息是,大多数语言/框架都有某种形式的映射库,可以让您自动从一个对象映射到另一个结构相似的对象。这是一开始加快速度的好方法,同时当需求发生变化时,您仍然可以灵活地创建手动映射。