搜尋
首頁開發工具composer詳解Composer+Git怎麼創建 '服務類別庫”

本文由composer教學專欄為大家介紹Composer 怎麼結合 Git 來建立 “服務類別庫”,希望對需要的朋友有幫助!

導語

我一直認為,現在的PHP 已經進展到了工程化的領域。以前的 PHP 開發者,以快為美,速度和規模永遠都是矛盾體。現在的 PHP 項目,特別是稍微大型一點的項目中,已經在逐漸演化成為需要兼顧工程化和規模化的層次了。一個程式碼工程化,就意味著演化成逐漸複雜的架構。複雜的架構,微服務往往就是一個很好的選擇。

我在最近的一個專案中,就需要這個問題。我需要發展一個地圖服務,這個服務當然不是簡單的類別庫形式,而是有自己的資料庫,自己的服務介面。這種情況其實最優的選擇就是服務化。服務化的方式當然很多了,Thrift,Http 等。但我評估了下當前的部門環境,PHP 是主流的語言,加上自己這個專案的進度也比較緊,在我眼中,Thrift,Http 等方式都是使用網路協定實現服務的解耦合,這在我看來已經是重度解決方案了。我覺得在專案沒有明確清晰病入膏肓的情況下是沒有必要這種方式的。使用網路協定服務化的缺點在於引入了強大的複雜度。這個複雜度往往意味著人力,物力,時間上的投入。所以我希望,能夠提供一個 PHP 語言的 “服務類別庫” 的形式來開發。

我想到的就是 PHP 的 Composer。

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怎麼創建 '服務類別庫”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除
作曲家:簡化PHP項目開發作曲家:簡化PHP項目開發Apr 15, 2025 am 12:08 AM

Composer簡化PHP項目開發的步驟包括:1)添加依賴,如在composer.json中添加"laravel/framework":"^8.0";2)自動加載,通過定義命名空間和類路徑生成autoload.php文件;3)優化性能,使用composerdump-autoload-o和composerinstall--no-dev--optimize-autoloader命令。通過這些步驟,開發者可以提高效率並避免常見錯誤。

作曲家憑證:是什麼使某人成為作曲家?作曲家憑證:是什麼使某人成為作曲家?Apr 14, 2025 am 12:13 AM

成為作曲家的關鍵要素包括:1.掌握音樂理論,2.具備創造力和原創性,3.擁有技術技能,4.能夠進行情感表達和故事講述,5.理解文化和歷史背景,6.積累實踐和經驗,這些要素共同構成了作曲家的身份和能力。

成為作曲家的途徑:實用指南成為作曲家的途徑:實用指南Apr 13, 2025 am 12:11 AM

成為作曲家的步驟包括:1.掌握音樂基本元素,如音符、節奏、和聲、旋律;2.選擇合適的技術工具,如AbletonLive;3.理解作曲的過程,包括靈感獲取、構思、編寫、修改和完善;4.從簡單旋律創作開始,逐步嘗試複雜技巧如和聲進行;5.通過調試技巧解決常見問題,如音符選擇和節奏安排;6.應用性能優化和最佳實踐,如使用模板、版本控制和協作。

作曲家:構建強大PHP應用程序的關鍵作曲家:構建強大PHP應用程序的關鍵Apr 12, 2025 am 12:05 AM

Composer是構建健壯PHP應用的關鍵工具,因為它簡化了依賴管理,提升了開發效率和代碼質量。 1)Composer通過composer.json文件定義項目依賴,並自動下載和管理這些依賴。 2)它生成composer.lock文件確保依賴版本一致,並通過vendor/autoload.php實現自動加載。 3)使用示例包括基本用法如添加日誌庫,以及高級用法如版本約束和環境變量管理。 4)常見錯誤調試技巧包括處理依賴衝突和網絡問題。 5)性能優化建議包括使用composer.lock文件和優化自動加載。

作曲家專業知識:是什麼使某人熟練作曲家專業知識:是什麼使某人熟練Apr 11, 2025 pm 12:41 PM

要在使用Composer時變得熟練,需要掌握以下技能:1.熟練使用composer.json和composer.lock文件,2.理解Composer的工作原理,3.掌握Composer的命令行工具,4.了解基本和高級用法,5.熟悉常見錯誤與調試技巧,6.優化使用和遵循最佳實踐。

作曲家在做什麼?作曲家在做什麼?Apr 08, 2025 am 12:19 AM

Composer是PHP的依賴管理工具,用於聲明、下載和管理項目依賴。 1)通過composer.json文件聲明依賴,2)使用composerinstall命令安裝依賴,3)解析依賴樹並從Packagist下載,4)生成autoload.php文件簡化自動加載,5)優化使用包括使用composerupdate--prefer-dist和調整autoload配置。

什麼是應用作曲家?什麼是應用作曲家?Apr 07, 2025 am 12:07 AM

AppComposer是一種用於構建和管理應用程序的工具。 1)它通過拖拽和配置預定義組件簡化應用開發,提高效率。 2)開發者可以定義組件、組合界面、定義業務邏輯,並最終渲染應用。 3)支持基本和高級用法,如任務管理和條件渲染,幫助構建靈活的應用。

作曲家是用什麼?作曲家是用什麼?Apr 06, 2025 am 12:02 AM

Composer是PHP的依賴管理工具。使用Composer的核心步驟包括:1)在composer.json中聲明依賴,如"stripe/stripe-php":"^7.0";2)運行composerinstall下載並配置依賴;3)通過composer.lock和autoload.php管理版本和自動加載。 Composer簡化了依賴管理,提升了項目效率和可維護性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具