gpt4 book ai didi

design-patterns - 数据映射器、存储库和工作单元模式

转载 作者:行者123 更新时间:2023-12-05 06:41:19 26 4
gpt4 key购买 nike

我正在学习以下模式

  • 数据映射器
  • 存储库
  • 工作单元

我想我理解他们每个人,但我无法回答这些问题

  • 他们总是习惯在一起吗?
  • 哪个模式使用其他模式?
  • 领域模型知道哪种模式?
  • 它们各自处理哪些 CRUD 操作?
  • 谁拥有数据库代码(即 SQL)?

谢谢。

最佳答案

Data Mapper 会将您的数据库对象映射到您的应用程序中使用的现实世界对象,并以其他方式返回(从实际工作对象到数据库对象)。您将使用它,因为您可能不想在应用程序外部显示数据库中的属性。示例可能是数据库中的创建日期、时间戳或加密值。所以你的模型可能看起来像

UserDatabaseModel (This is whats in your database)
Id
Name
Email (stored encrypted in the database)
CreatedDate
Timestamp

UserViewModel (This is what you want to show your user)
Id
Name (shown not encrypted)
Email

您的映射器将负责将 UserDatabaseModel 映射到 UserViewModel 并解密电子邮件(向用户显示加密的电子邮件地址毫无意义)。并以另一种方式将 UserViewModel 映射到 UserDatabaseModel 并加密电子邮件以存储在您的数据库中。 Mapper 将在幕后处理此问题,因此您不必担心一直调用加密/解密。

工作单元和存储库一起工作。工作单元控制一个工作单元,因此如果例如更新用户实际上更新了数据库中的 2 个表,那么如果两个表都保存了,您只想保存详细信息。你把它包装在你的工作单元中(就像 sql 中的事务)。您的存储库负责 CRUD 或任何其他数据库操作。您将定义从数据库中获取用户或更新存储库中的用户的代码。

因此从您的代码更新数据库可能类似于:

try{
uow = new UnitOfWork //start a new database transaction

repo = new UserRepository
repo.UpdateUser //calls database
repo.UpdateUserAddress //calls database

uow.Save //commit the database transaction
} catch {
uow.Rollback //something went wrong, rollback transaction
}

关于design-patterns - 数据映射器、存储库和工作单元模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com