1

Я учусь о следующих моделяхData Mapper, Repository и блок шаблонов рабочих

  • Mapper данных
  • Repository
  • Единица работа

Я думаю, что я понимаю, каждый из но я не могу ответить на эти вопросы

  • ar Они всегда были вместе?
  • какой шаблон использует другие?
  • какой шаблон известен доменной модели?
  • Какие операции CRUD обрабатываются каждым из них?
  • , которому принадлежит код базы данных (т. Е. SQL)?

Спасибо.

ответ

0

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 и unencrypting электронной почты (с указанием шифрованного адреса электронной почты, чтобы пользователь не имеет смысла). И наоборот, сопоставление 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 
}