1

私は以下のパターンについて学んだデータマッパー、リポジトリとユニット

  • データマッパー作業

  • リポジトリ
  • ユニット私はそれぞれを理解すると思いますこれらの質問に答えることはできません。

    • ar彼らはいつも一緒に一緒に過ごした?
    • どのパターンが他のパターンを使用していますか?
    • どのパターンがドメインモデルによって知られていますか?
    • どのCRUD操作がそれぞれどのように処理されますか?
    • 誰がデータベースコード(SQL)を所有していますか?

    ありがとうございます。

  • 答えて

    0

    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 
    } 
    
    関連する問題