我正在用 Java 實現一系列 REST 微服務——我們稱它們為“適配器”。每個服務都從特定的源類型讀取數據,并以相同的方式提供結果。主要思想是為所有這些提供相同的接口(服務合同),以獲得可互換性。我想避免代碼重復并重用服務的服務合同??磥砦艺谥匦掳l明輪子。對此有標準方法嗎?我嘗試以 Java 接口的形式為 Spring MVC Controller 類和隨附的 DAO 類提取服務合同CustomObject:public interface AdapterController { @RequestMapping(method = RequestMethod.GET, value = "/objects/{name}") CustomObject getObject(@PathVariable final String name);}然后將它們放入單獨的 Maven 項目中,將其設置為原始項目中的依賴項,并重寫 REST 控制器類,如下所示:@RestControllerpublic class DdAdapterController implements AdapterController { @Override public CustomObject getObject(String name) { return model.getByName(name); }我也可以在客戶端代碼中重用 DAO 對象,但是接口類在客戶端是無用的。1)總結:可以在不同的服務實現之間重用/共享服務契約嗎?這樣做的代價是什么?是否有共享服務合同的最佳實踐?2)下一個問題是關于服務合同和消費客戶??梢栽诜蘸涂蛻舳酥g共享合同嗎?Java/方法中有一些工具嗎?
2 回答
千巷貓影
TA貢獻1829條經驗 獲得超7個贊
這違背了微服務的心態,從長遠來看,共享代碼是一個壞主意。
如果您開始共享代碼,您將慢慢構建一個分布式單體,其中多個服務相互依賴。
之前很多人都討論過這個問題:
構建微服務的關鍵是:
一項服務應該非常擅長一件事
保持小
有一個非常有據可查的 api
當您需要刪除一個微服務時,應該這樣做,因為很少需要更新其他服務
避免代碼共享,將所有庫視為 3rd 方庫,甚至是您自己的庫
qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
微服務應該松散耦合 = 最小依賴。
微服務是一種架構風格,它將應用程序構建為服務的集合,這些服務是
高度可維護和可測試
松耦合
可獨立部署
圍繞業務能力進行組織。
可以使用 WADL 定義合約
在客戶端和服務器之間使用契約意味著在實現客戶端時更少的錯誤,更少的誤解。這就是合同的好處。
添加回答
舉報
0/150
提交
取消
