簡體   English   中英

通用代碼生成與硬編碼API調用:最佳方法

[英]Generic code generation vs Hardcoded API calls: Best approach

我陷入了一個場景,想知道可以應用的最佳實踐。 我正在電子商務網站上處理訂單,貨運,發票等。

除了在我的應用程序中創建UI之外,我還能夠通過不同的供應商(通過供應商apis xml / json)發送/接收數據。 該應用程序可以將訂單/裝運過帳到在我的應用程序中創建的供應商,或從供應商處獲取所有訂單/裝運以導入我的應用程序。 情況因供應商而異。

我的問題是解決這個問題的最佳方法是什么。 以下是我想到的兩種方法。 我現在正在使用第一種方法,但是我在考慮是否在這種情況下使用正確的方法。

1.)我創建了一個通用代碼來基於XPATH生成JSON / XML。 例如,對於下面的XML生成,我將XPATH用作Orders.order.orderNumber <Orders><order><orderNumber>testorder</orderNumber></order></Orders> ,XPATH存儲在數據庫中,並基於不同的配置數據庫中的XPATH,將生成完整的JSON / XML並將其發送給供應商(數據庫中也配置了GET / POST)。

我認為這種方法的優勢在於,只需很少的工作即可向系統中添加新的供應商。 我認為它的缺點是XML / JSON生成會經歷大循環。 由於供供應商使用的API(訂單GET等)大部分是固定的,因此這似乎是不利的。

2.)我創建了單獨的服務來處理每個供應商調用,創建使用XML硬編碼到應用程序中的方法來處理每個調用(在DB中沒有通過XPATH進行配置)。 例如,對於2個供應商SuppA和SuppB。 對於SuppA訂單列表將被下載,對於SuppB裝運將被過帳。 因此,在我的應用程序中將有2種服務,每個供應商的呼叫彼此獨立,一種服務用於SuppA,另一種用於SuppB。 SuppA服務將調用GET api訂單,SuppB服務將調用Shipments POST api。

我認為這樣做的好處是,它將很快,因為不需要XML / JSON生成,因為每個供應商的服務代碼中只會編碼所需的調用。 我認為它的缺點是只能調用固定服務。 我的第一種方法是可以通過DB更改任何內容,但是在此代碼中需要更改。

請對此提出建議。 哪種方法最適合這種情況,通用數據庫配置或硬編碼的單獨供應商服務?

首先為代碼編寫單元測試。 這很有可能使您問自己,是什么導致了可測試性和可維護性更高的應用程序,以及以何種質量方式解決了問題。 答案可能是#1和#2的組合。 硬編碼“魔術”值從來都不是一個好選擇。 並且,就性能和/或可伸縮性而言,必須調用沉重的持久層也不是很重要。

我建議:

  1. 將值存儲在易於維護的可配置位置。
  2. 使用諸如Redis或Memcache之類的緩存層,以使代碼以可擴展和可擴展的方式獲取值。

好處:

  1. 防止硬編碼。
  2. 防止在應用程序配置更改時進行硬重置/重啟。
  3. 用於添加/刪除新供應商的更具擴展性的代碼。
  4. 更好的整體應用敏捷性。

最后一點:一個有趣的想法,您可以使用工廠模式即時生成供應商對象,以允許在不對系統進行重新編碼的情況下向正在運行的系統添加和刪除供應商。 這有點復雜,但可以選擇。

我個人認為第二種方法更接近於我選擇的解決方案:您需要與許多外部接口進行通信。 根據您的描述,我知道所有這些都可以處理XML或JSON。 考慮應該迅速添加新供應商的情況,這成為有關可維護性的問題。

因此,我將為每個供應商定義一個具有匹配數據模型的接口。 在您這一邊,您將擁有一個不同的數據模型來表示訂單,裝運,發票等。 然后,您可以使用映射框架(如Dozer)將數據從一種表示形式轉換為另一種表示形式。

然后,您可以使用其他框架JAXBGSON將您的對象轉換為XML或JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM