我正在学习以下模式
我想我理解他们每个人但我无法回答这些问题
感谢。
答案 0 :(得分:0)
Data Mapper会将您的数据库对象映射到应用程序中使用的真实世界对象,并以相反的方式(从实际工作对象到数据库对象)。您可以使用此功能,因为您可能在数据库中拥有不希望在应用外显示的属性。示例可以是数据库中的createdDate,timestamp或加密值。所以你的模型可能看起来像
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 maping到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
}