私は以下のパターンについて学んだデータマッパー、リポジトリとユニット
- データマッパー作業
の
- ar彼らはいつも一緒に一緒に過ごした?
- どのパターンが他のパターンを使用していますか?
- どのパターンがドメインモデルによって知られていますか?
- どのCRUD操作がそれぞれどのように処理されますか?
- 誰がデータベースコード(SQL)を所有していますか?
ありがとうございます。
私は以下のパターンについて学んだデータマッパー、リポジトリとユニット
の
ありがとうございます。
Data Mapperはデータベースオブジェクトをアプリケーションで使用されている実際のオブジェクトにマップし、逆に(実際の作業オブジェクトからデータベースオブジェクトに)戻します。これは、データベース上にアプリの外に表示したくないプロパティがある場合に使用します。例としては、createdDate、timestamp、またはデータベースの暗号化された値などがあります。だからあなたのモデルはUserViewModelにUserDatabaseModelをmapingし、(ユーザーが無意味であるに暗号化された電子メールアドレスを示す)、電子メールをunencryptingための責任を負うことになる
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
あなたのマッパーのようになります。 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
}
を