2017-04-11 79 views
-3

我需要通過web api將實體(例如產品數據)從本地系統公開給外部客戶端。實體字段名稱&格式在兩個系統中是不同的,例如類別需求映射到ProductCategroy,類似的日期格式也可能會有所不同。在字段格式周圍還可能存在其他業務規則。如何設計web api中兩個不同系統之間的映射實體

而不是使用像Automapper這樣的映射工具映射代碼中的字段,或者開發自定義映射器我想使用配置文件,以便在添加/更新字段後不必重新編譯。

例如我們要暴露一個人的實體,字段名如下

Person 
NationalityIsoCode <--Will need mapped to--> NATIONALITY 
BirthDate <--Will need mapped to--> DATEOFBIRTH 
IsPersonDisabled <--Will need mapped to--> DISABLED 
StartDate <--Will need mapped to--> DATEFROM 

這可以在automapper可以非常容易地處理不同。我們遇到的問題是,如果需要添加/刪除/外部暴露新字段,則必須在添加該屬性後重新編譯代碼。我希望這些屬性可以配置以避免重新編譯。

任何人都可以建議任何工具/例子或方法,可能有助於發展呢? 謝謝

+2

目前尚不清楚您的實體如何在本地系統內被分散,以便理論上避免在向某個實體添加字段時重新編譯Web服務。在不知道映射的「源格式」的情況下,很難提出任何建議。 – SergGr

+0

客戶端向我們的API請求數據,這些數據存儲在sql server中並通過服務端點公開。我們的中間件API從客戶端收到此請求並調用內部端點。收到數據後,像「Product」這樣的商業模型對象暫時保存這些數據。然後,服務層根據模型中各個字段的業務規則轉換此數據。一旦轉換,數據就會傳回。我在上面描述了一個具有不同字段名稱的Person實體 – rumi

+0

看看[這篇文章](https://lostechies.com/jimmybogard/2011/02/09/autoprojecting-linq-queries/)。他們使用表達式樹將查詢投影到其他類,檢查屬性名稱。使用更具體的:MemberInit。你可以編輯它,從你的xml加載源和目標屬性的配置。如果你願意,我可以發表一個你想要的完整的例子。 –

回答

-1

APIs創建兩個系統會合的端點。映射發生在消費者一方。您的系統API應該交付本機標記的數據。然後,連接的API有映射的負擔。關鍵是要消除依賴關係,而不是把它們混合在一起。

如果您正在編寫這兩個API,請將映射放在合作伙伴端 - 主API應始終保持原生狀態,以便其他API可以連接。

請參閱:分離關注點。

相關問題