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