ボヌド䞊に倚くのネットワヌクデバむスがあるデバむスの゜フトりェアバヌゞョン管理の線成のバリ゚ヌション

バヌゞョン管理システムでリポゞトリを敎理するこずに぀いお、いく぀かのアむデアを共有したいず思いたす。 明確にするために氎星を䜿甚したすが、これはそれほど重芁ではありたせん。



タスクに぀いお簡単に説明したす。 同時に、いく぀かのプロゞェクトが進行䞭です。 プロゞェクトは、ネットワヌクに接続されたボヌド䞊のデゞタルデバむス倚数のデバむスを備えたデバむスです。 これは、バヌゞョン管理システムを䜿甚しお远跡する必芁があるオンボヌドデバむス゜フトりェアに関するものです。



さたざたなデバむスで同じオンボヌドデバむスがありたすが、特定のデバむスがありたす。 デバむスはさたざたな開発者がプロ​​グラムでき、䞀郚のデバむスは請負業者がプログラムしたす。 オンボヌドデバむスのプロセッサコントロヌラのブランドは異なりたす。 異なるデバむスは同じラむブラリを䜿甚できたすドラむバヌ、数孊など。



開発者は出匵詊甚に倚くの時間を費やしたす。そこでは、コヌドを倉曎し、むンタヌネットで曎新を亀換する必芁がありたす。



珟圚、そのような䜜業がバヌゞョン管理システムなしで実行されたこずは驚くべきこずです。 おそらく、これは、それほど倚くのプロゞェクトがなく、開発者が2人しかいなかったために可胜でした。 しかし、物事はもはやこのように進むこずができたせん。



バヌゞョン管理の抂念を圢成し、この抂念に沿っおプロゞェクトをリファクタリングし始めおいたす。 私たちは旅の始たりにいたすが、私たちは芋぀けた解決策が奜きですが、おそらくすべおの萜ずし穎が芋圓たらないため、将来的には支払うこずができたす。 読者の掚奚が、゚ラヌを修正するのに圹立぀こずを願っおいたす。





それで、たさに制埡の抂念に぀いお。 分散バヌゞョン管理システムを䜿甚するこずは基本です䞊蚘の頻繁で長時間の出匵を参照しおください。 いく぀かの理由で、遞択は氎星に萜ちたしたが、Geetはおそらく降りおきたでしょう。



リポゞトリは1぀ではなく、それら党䜓ツリヌ、構造で䜿甚されたす。 リポゞトリは盞互接続され、特定の順序でフォルダに配垃されたす。 さらに、このようなストレヌゞのセットをリポゞトリツリヌず呌びたす。



1぀のストレヌゞツリヌがサヌバヌでホストされたす。 圌のクロヌンは地元のPC開発者にありたす。 開発者は、ロヌカルツリヌたたはその個々のブランチを必芁に応じお耇補したす。



ストレヌゞツリヌテンプレヌトは次のずおりです。



Repositories | +–.CrossplatformLib1 | +–.CrossplatformLib2 | +–... | +–Platform1 | | | +–.Platform1Lib1 | | | +–.Platform1Lib2 | | | +–... | +–Platform2 | | | +–.Platform2Lib1 | | | +–.Platform2Lib2 | | | +–... | +–... | +–Devices | | | +–.Device1 | | | +–.Device2 | | | +–... | +–Vehicles | +–Vehicle1 | +–Vehicle2 | +–...
      
      





名前の先頭にあるドットは、リポゞトリを瀺したす䟋.Device1。 ドットのない名前は、デバむスなどの通垞のフォルダヌです。



ツリヌのルヌトRepositoriesフォルダヌのルヌトには、クロスプラットフォヌムラむブラリ数孊、アルゎリズムなどを含む.CrossplatformLibXリポゞトリがありたす。



PlatformXフォルダヌは同じレベルにあり、PlatformXプラットフォヌム固有のラむブラリヌを含む.PlatformXLibYリポゞトリヌがありたす。 たずえば、Windowsのネットワヌクドラむバヌ。



最䞊䜍の[デバむス]フォルダヌには、さたざたなデバむスで䜿甚できるオンボヌドデバむス甚の.DeviceX゜フトりェアのリポゞトリがありたす。



最埌の最䞊䜍フォルダヌはVehiclesです。 さたざたなVehicleXデバむスのプロゞェクトが含たれおいたす。



たた、特定のVehicleXデバむスのプロゞェクトは、リポゞトリたたはリポゞトリのセットにするこずができたす。 これはそれほど重芁ではないので、埌で詳しく説明したす。





考慮された構造は、盞互のストレヌゞの堎所を瀺しおいたす。 次に、ストレヌゞ自䜓の配眮方法を芋おみたしょう。



ストレヌゞメカニズムは実質的に䜿甚されたす私が理解しおいるように、最新のバヌゞョン管理システムにはすべおこのような機䌚がありたす。



たずえば、いく぀かのDevices \ .DeviceXデバむスを考えたす。 デバむスXがクロスプラットフォヌムラむブラリYずプラットフォヌムZ専甚のラむブラリを䜿甚するずしたす。次に、Devices \ .DeviceXフォルダヌのレベルで、.CrossplatformLibYずPlatformZ \ .PlatformZLibNのストレヌゞクロヌンが䜜成されたす。



 Repositories | +–Devices | +–.DeviceX | +–.CrossplatformLibY | +–.PlatformZLibN | +–DeviceXSpecificFolder1 | +–...
      
      





.CrossplatformLibYおよび.PlatformZLibNリポゞトリず共に、フォルダヌには、DeviceXSpecificFolderMなどのフォルダヌ内のデバむスX固有の゜ヌスコヌドファむルが含たれたす。



盞察パスはコンパむラ蚭定ファむルで䜿甚され、これらのファむル自䜓はバヌゞョン管理システムによっお远跡されたす。 .DeviceXプロゞェクトを別のコンピュヌタヌに転送する必芁がある堎合、たずえば、ラップトップにコピヌしお出匵で持ち歩く堎合は、.DeviceXフォルダヌのみをコピヌするだけで十分です。コンパむルに必芁なすべおの情報が含たれおいたす。 コピヌされた.DeviceXフォルダヌぞのパスを倉曎しないでおく必芁はたったくありたせん。





次に、倚くのネットワヌクデバむス.DeviceYを含むVehicleXのプロゞェクトに戻りたす。 最も単玔なケヌスでは、すべおのオンボヌドデバむスがネットワヌク内のスレヌブサブスクラむバヌであり、そのうちの1぀がマスタヌです。 それをマスタヌず呌びたしょう。 䞻芁なサブスクラむバヌはシステム統合の䞭心です。圌はすべおのメッセヌゞのフォヌマットを知っおおり、リク゚ストを送信し、回答を受け取りたす。察応する.VehicleXストレヌゞは次の構造を持぀こずができたす。



 Repositories | +–Vehicles | +–.VehicleX | +–.DeviceY | +–.DeviceZ | +–DeviceM | +–... | +–Master
      
      





ネットワヌクデバむスは、ナニバヌサル異なるデバむスで䜿甚たたは特定のいずれかです。 最初の堎合、察応するストア.DeviceYずするは、Devices \ .DeviceYストアのクロヌンです。 2番目のケヌスでは、デバむスプロゞェクトを個別のリポゞトリ.DeviceZずしお制埡したり、.VehicleXストレヌゞの個別のサブフォルダヌずしお線成したりできたすたずえば、これは.VehicleX \ DeviceMです。 ストレヌゞを備えたバリアントは、プロゞェクトからクロヌニングによっお分離しやすいずいう点で、より䟿利です。



問題は。 ナニバヌサルデバむス.DeviceYのすべおの゜ヌスを.VehicleXストレヌゞに保存する必芁がありたすか 実際、䞻芁なマスタヌサブスクラむバヌを開発するには、ナニバヌサルデバむスのむンタヌフェむス最も単玔な堎合はメッセヌゞの圢匏を知るだけで十分です。 これらの圢匏は䞀般に安定しおおり、ほずんど倉曎されたせん。 同時に、デバむスの実装は定期的に倉曎されたす。少なくずも開発の初期段階では、むンタヌフェヌスよりもはるかに頻繁に倉曎されたす。



.VehicleXプロゞェクトず.DeviceYプロゞェクトを匷力に接続するのはなぜですか ネットワヌクデバむスの実装の内郚詳现を倉曎するずきに、システムむンテグレヌタヌマスタヌ開発者がこれらのプロゞェクトを理解しお同期する必芁があるのはなぜですか



デバむスプロゞェクト党䜓ではなく、むンタヌフェむスのみを同期するず、䞊蚘の問題は解決されたす。 むンタヌフェむスを远跡するための1぀のオプションは、これかもしれたせん。 別のリポゞトリ.Interfaceでデバむスむンタヌフェむスファむル.DeviceYを遞択したす。



 Repositories | +–Devices | +–.DeviceY | +–.Interface | | + +- device_y.h | +–Source | +–...
      
      





.Interfaceリポゞトリは、単䞀のdevice_y.hヘッダヌファむルで構成されるこずがよくありたす。



これで、.VehicleXデバむスのリポゞトリで、.DeviceYプロゞェクト党䜓ではなく、その.DeviceY \ .Interfaceむンタヌフェむスのみを远跡できたす。 そのクロヌンは、リポゞトリ.VehicleX \ Devices \ .DeviceYに配眮できたす。



 Repositories | +–Vehicles | +–.VehicleX | +–Devices | | + +-.DeviceY | | + +-... | +–... | +–Master
      
      





.VehicleX \ Devicesフォルダヌには、他のネットワヌクデバむスのむンタヌフェむスを配眮できたす。 ネットワヌクデバむス.VehicleX \ Devices \ .DeviceYのむンタヌフェむスの各ストアぞのパスをマスタヌコンパむラの蚭定に指定しないようにするには、.VehicleX \ Devicesフォルダヌに#includeを䜿甚しおdevice_y.hファむルを配眮できたす。 その埌、マスタヌコンパむラの堎合、パス.. \ Devicesのみを登録するだけで十分です。



請負業者がネットワヌクデバむスを開発しおいる堎合、むンタヌフェむスを䜿甚しお考慮される手法は特に䟿利です。 この堎合、デバむスの゜ヌスコヌドは利甚できない可胜性がありたすが、たずえば、技術的なタスクの圢成段階で、むンタヌフェむスファむルは䞀貫しおいる必芁がありたす。



それはすべお䞀般的な甚語です。 ただし、すべおの質問がここに蚘茉されおいるわけではありたせん。 たずえば、実行可胜ファむルバむナリのバヌゞョンを制埡する方法はただ決定しおいたせん。 ストレヌゞが膚匵しないように、バヌゞョンシステムの制埡䞋に眮くこずは本圓に望たしくありたせん。 そしお、各プロゞェクトが倚くの実行可胜ファむルで構成されおいるこずを考慮するず、「dllの悪倢」が予想されたす。



All Articles