2017-04-05 8 views
0

TypeScriptを使用したAngular 2+アプリケーションの作成。TypeScript/Angular 2、共通のデータ変換パターンは何ですか?

データソースに保存するオブジェクトをモデリングしています。これらのオブジェクトにはヘルパーメソッドがあります。私はそれらを問​​題なく保存します。 SAMPLE原文クラスDESIGN RETURNED

export class Order { 
    readonly orderNumber: string; 
    amount: number; 
    shortCode: string; 
    readonly dateCreated: string; 

    constructor(){ 
     this.orderNumber = cuid(); 
     this.dateCreated = moment().format(); 
    } 

    incrementAmount(): void { 
     this.amount += 1; 
    } 

SAMPLE:私はそれらを取得するとき

{ amount: 74.22, 
    dateCreated: '2017-04-03T21:23:49-04:00', 
    orderNumber: 'cj12v2rf50000zoguviraoik9', 
    shortCode: 'SJLLDE' } 

は今、彼らは、元のオブジェクト形式ではありません。それは、オブジェクトを取得し、フィールドごとに元のオブジェクトタイプに読み取る非常にアンチJavaScript(TypeScript)のようです。あるいは、1つの既知のオブジェクトを扱うことによって、自分のタイプの使用を最大化して機能を高めることができるように見えます。

データはサービスから返され、元のオブジェクトに転送され、このエコシステムでは共通パターンとして実行されますか?

そうしている一般的な方法を説明する書き込みがある場合は、

+0

「これは元のオブジェクト形式ではありません」とはどういう意味ですか?これはオブジェクトのJSON表現のように見えますが、どのように見えるのですか? – Claies

+0

私はs /彼はそれがタイプされていないことを意味すると思います。 – Pablo

+1

もう一つのパターンは、OOPを完全に避け、あなたのメソッド(関数、実際には)をデータと区別して保つことです。その後、返されたデータに対して関数を呼び出す際に問題は発生しません。 – artem

答えて

2

バックエンドからオブジェクトを受け取ったら、そのオブジェクトをJSONオブジェクトから適切なモデルオブジェクトに変換する必要があります。

これは私が通常何をすべきかです:

let order: Order = new Order(orderJsonObject); 

、あなたはこのようなあなたのコンストラクタを更新する必要があることを行うことができるようにするには:

export class Order { 
    readonly orderNumber: string; 
    amount: number; 
    shortCode: string; 
    readonly dateCreated: string; 

    constructor(data){ 
     if(data != null) { 
      this.orderNumber = data.orderNumber; 
      this.amount = data.amount; 
      this.shortCode = data.shortCode; 
      this.dateCreated = data.dateCreated; 
     } else { 
      this.orderNumber = cuid(); 
      this.dateCreated = moment().format(); 
     } 
    } 
} 

これは私が使用したパターンであり、それは持っています今まで私たちによく役立っていました。

幸運

+0

いいえ、私はこれをやっていることを認識していました。よりエレガントなものがあるようでした。たぶんそのシンプルで、それが使用されていることを知ってうれしい。 –

関連する問題