データ転送オブジェクト


良い日の人々、私はこの記事を書くために私を動かした何かをつまずいた、私は私がユーザーからDTOに取得していたデータを転送しなければならなかった、それは私に非常に新しいので、私は被験者に少し研究を行ったと私は私の調査結果を共有することを決めたと私はどのようにDTMを実装したかを決定しました.あなたはこの記事を理解するためにtypescriptと一致する必要があります.

DTOのは何ですか
DTOは、プロセスを通してデータを転送するために使用できるオブジェクトである.この場合のプロセスは、通常、クライアントとサーバとの間の通信である.このプロセスは、クライアントとサーバの間の単一の要求/応答プロセスに時間がかかるので、非常に高価です.これを否定するために、私たちは、クライアントとサーバーの間でデータを転送することによってサーバーへの呼び出しの量を減らすことができます.
DTOはまた、データベース内のデータをどのように永続化するかを決める際に有用です.データのクライアント表現をデータベースに格納する方法と逆互換性のある方法でデータをクライアント表現することができれば良いでしょう.これは、データが両方のデータベースで表現されているので、我々のアプリケーションを簡単にアップグレードすることができます、フロントエンドは一貫しているので、我々は我々のデータを編集する必要はありません.
この記事の範囲がDTOだけをカバーしていて、タイプスクリプトではないので、私はインストールをスキップして、タイプスクリプトをセットアップします.

DTOの作成
DTOはメソッド、プロパティだけを持たないオブジェクトです.ユーザを作成し、ユーザに次のように設定します.
  • firstname
  • Lastname
  • メール
  • 予算
  • phonenumber.
  • どのように、これは我々を助けますか?我々は、すべてのユーザーが達成するために必要な契約を定義するインターフェイスを作成することができますし、実際には、ユーザーは、インターフェイスを実装する必要がありますと言う任意のオブジェクトを定義します.レッツゴーアヘッド.
    // user.interface.ts
    
    export interface User {
     firstName : String;
     lastName: String;
     email: String;
     budget: Number;
     phoneNumber: Number
    }
    
    これで、ユーザーインターフェイスを実装するクラスを作成できます.
    // user.ts
    import { User as UserInterface } from './user.interface.ts'
    
    export class User implements UserInterface {
     constructor(public firstName: String, public lastName: String, public email: String, public budget: Number, public phoneNumber: Number){
     }
    }
    
    新しいユーザーを作成したいときは、必ず必要なプロパティだけを保持します.クラスのインスタンスをシリアル化し、データベースに格納するサーバーに送信することができます.
    // index.ts
    import { User } from 'user.ts';
    import { User as UserInterface } from 'user.interface.ts'
    //we are crrating our data ourselves here, but normally we would get it from the user
    
    const firstName: String = 'john'
    const lastName: String = 'doe'
    const email: String = '[email protected]'
    const budget: Number = 1000
    const phoneNumber: Number = +2347684328
    
    const user = new User(firstName, lastName, email, budget, phoneNumber);
    
    // we can now send the user to the server
    const storeUser = async function (user: UserInterface) {
     const res = await fetch('link to your server')
     const data = res.json()
     //do something with data
    }
    
    storeUser(user)
    
    DTOのこの1つのユースケース.明確に我々は我々のデータベースからユーザーを取得し、フロントエンドで使用する場合はどうですか?時々、我々のサーバーは、我々のユーザーに他の特性に鋲を打つかもしれませんか?どのように我々は我々のアプリが壊れないことを確認することができますか?我々は、我々は我々のアプリに依存してデータを取得することを確認する前に定義されたユーザークラスを使用することができます
    // app.ts
    import { User } from 'user.ts'
    
    class Customer extends User {
     constructor(public firstName: String, public lastName: String, public email: String, public budget: Number, public phoneNumber: Number, public isAdmin: Boolean, public id: String){
     }
    }
    
    let customer: User
    
    function getUserName (user: User){
    console.log(user.firstName + ' '+ user.lastName)
    }
    
    const getCustomer = async () => {
      const res = await fetch('url')
      const data = await  res.json()
      customer = data
      getUserName(customer)
    }
    
    getCustomer()