中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Composer+Git如何創建服務類庫

發布時間:2023-03-16 14:54:02 來源:億速云 閱讀:219 作者:iii 欄目:軟件技術

這篇文章主要講解了“Composer+Git如何創建服務類庫”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Composer+Git如何創建服務類庫”吧!

Composer 的修改

創建服務類庫

首先,我需要把我的 “服務類庫” 從我的應用程序(起名為 xxx/main1)中獨立出來,這個獨立,我不是選擇在應用程序中創建一個目錄(事實我想過創建一個諸如 Services 的目錄)。但是,如果和業務程序在代碼上耦合起來,我覺得以人的惰性,很難從始至終都控制住自己能堅持不使用應用程序中方便的各種函數。所以我的選擇是在 Git 庫中新創建一個項目,起名為 xxx/mapService 。

composer.json

現在兩個 Git 項目(xxx/main1 和 xxx/mapService),我在 main1 中的 composer.json 文件中增加下面的語句:

Composer+Git如何創建服務類庫

而在 mapService 的 composer.json 如下:

Composer+Git如何創建服務類庫

這個配置告訴 main1 項目,mapService 的 Git地址,需要使用的版本。

當然需要注意下面幾點:

  • dev-master 意思是直接使用 mapService 的master分支。如果 mapService 有其他的 tag,這里完全可以使用 tag 信息

  • repositories 是說明項目的地址

  • 我這里的這個服務是放在我們公司自己搭建的 GitLab 上的

  • mapService 下面的 src 文件夾的命名空間為 xxxx\\xxxx\\MapService\\ 并且支持 PSR-4

  • mapService 使用了 illuminate/database

最后使用 composer update -vvv 可以把我們需要的 mapService 下載下來放在 vendor 目錄下。

更新修改

我們現在編輯器在 main1 項目中,如果我們有對 mapService 這個項目有進行編輯修改,并且希望合并到 mapService 的 master 分支的化,就直接進入 vender/xxx/mapService 目錄,進行 Git 對應的操作。這樣就可以進行直接的代碼修改了。

獨立配置

這種結構的組合方式只是完成了萬里長征的第一步。后續更為重要的是在編寫這個服務的時候,我需要時刻記住不使用 main1 的所有東西,這樣才能保持 mapService 的獨立性(獨立性是服務化的必要條件之一)。比如我第一個遇到的問題就是配置文件需要獨立。

我的實現方式是直接在 mapService 中創建一個 Config 類,這個類中直接寫死配置。

這里一直覺得這個配置文件的實現方式有點挫,因為這樣,這個配置文件就進入到了 Git庫。但是確實沒有想到更好的方案了。Laravel 中有通過實現 ServiceProvider 將 Config 創建在 Laravel 的config 文件夾下的方式,但是這種方式僅僅只適用于 Laravel。沒有通用性。在另外一個方向,我想服務使用哪個數據庫這個本身也是服務的一部分,放在服務的 Git 庫中貌似也沒有什么。

目錄結構

Composer+Git如何創建服務類庫

目錄結構如上

  • Configs 提供配置文件

  • Contracts 提供接口協議

  • Exceptions 提供異常

  • Supports 提供第三方方法或者類庫

  • Models 提供對數據庫的交互

  • Node.php 實現具體的接口

服務最重要的事情是接口協議。所以創建一個Contracts文件夾,將提供的服務接口化。

Composer+Git如何創建服務類庫

接口的異常處理盡量使用異常,而不是錯誤碼的方式進行交互。而且這些異常盡量要自定義。這樣,在上層就有了統一處理的可能性。

思考

這個架構模式我定位為 PHP 代碼層面服務化的模式。適用的場景應該是:

  • 后期計劃服務化

  • 前期人力和思維都希望維持快速開發的場景

和 Git 的 SubTree 、SubModule 的區別

其實這三種方式說到底都是將一個項目作為另外一個項目的類庫來使用的。SubTree 和 SubModule 是 Git 的解決方案。而 Composer 是 PHP 語言的解決方案,它除了將某個項目加入到另外一個項目的功能之外,還提供了加入版本,依賴解決等方案。如果你的項目是 PHP 的,那么無疑,使用 Composer 是更優的選擇。

后期協議服務化

如果后期我的這個 mapService 想要協議服務化,那么這個 mapService 項目就可以簡化成為一個SDK,對于上層業務邏輯,只需要使用 composer update 進行更新就行。

服務注冊和發現

我這里所謂的 “服務類庫” 確實沒有解決服務注冊的問題,我無法知道到底有幾個項目使用了我的服務。這個可能需要額外的流程的工作了。

感謝各位的閱讀,以上就是“Composer+Git如何創建服務類庫”的內容了,經過本文的學習后,相信大家對Composer+Git如何創建服務類庫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大埔区| 吴川市| 遵义市| 荥经县| 千阳县| 武山县| 凤冈县| 临沭县| 澜沧| 忻城县| 克山县| 呼伦贝尔市| 镇雄县| 星子县| 赤水市| 和顺县| 莆田市| 锦屏县| 伊金霍洛旗| 钟山县| 湟源县| 平罗县| 额济纳旗| 花垣县| 松潘县| 波密县| 灵丘县| 象山县| 五原县| 乌拉特中旗| 台安县| 浙江省| 康平县| 华阴市| 遂溪县| 乌拉特前旗| 寿阳县| 绥德县| 信阳市| 广灵县| 永城市|