Javascript - 物件對映automapper介紹

花間酒發表於2019-06-29

什麼是automapper?

之前在用後端語言寫api時,經常遇到如下場景

  1. 有個物件包含3個屬性,但我僅僅想返回2個屬性給外部,需要隱藏掉1個屬性
  2. 有個物件包含2個屬性,其中一個屬性是從資料庫或外部api取回的,所以屬性名也是從外部定義的,比如該屬性名為"out_prop1",但是因為我自己API的資料規範,該屬性的值應該賦予返回結果的"prop1"屬性內

上面只是兩個簡單的場景,如今我們API的結果大部分都是JSON結構。API層在返回結果時將資料結果JSON Serialization。

Javascript - 物件對映automapper介紹
像我之前,API層都資料基本就是從外部API或者資料層獲取(詳見DAO),但是我需要同意處理為符合我API資料規範的資料(詳見DTO),會進行包括上述兩條在內等的操作。 如果每次我都做屬性名稱轉化,刪除屬性等操作,那我就累死了,所以早已有了c#的automapper等強大完善等庫來幫你解決這個問題。

javascript是否需要?

個人覺得,大部分時候js其實不需要,因為js語言對object的操作已經非常簡單了。但是現在普遍用nodejs來做API中間層甚至server,也就不可避免地遇到上面的問題。此時有一個統一的可複用的庫來處理是最好不過的。

demo

下面是將prop1的屬性名轉為testprop1

    var objA = { prop1: 'From A', prop2: 'From A too' };
    let expectedResult = { testprop1: 'From A', prop2: 'From A too' };

    AutoMapper.createMap('a', 'b')
        .forMember('testprop1', (opts: IMemberConfigurationOptions) => opts.mapFrom('prop1'));
    var objB = AutoMapper.map('a', 'b', objA); 
    // objB = { testprop1: 'prop1', prop2: 'prop2' }
複製程式碼

下面是objA物件的prop2屬性忽略掉

    var objA = { prop1: 'prop1', prop2: 'prop2' };
    let expectedResult = { prop1: 'prop1' };

    AutoMapper.createMap('a', 'b')
        .forSourceMember('prop2', (opts: IMemberConfigurationOptions) => opts.ignore());
        var objB = AutoMapper.map('a', 'b', objA);
複製程式碼

原始碼github,這是我借鑑了github上一位開發者之前搞得mapper庫(這位大神參考c#的AutoMapper),我也站在這位大神的肩膀上,希望可以加上一些更符合js習慣,更有用的功能。

相關文章