yiiフレヌムワヌクに基づく階局化アヌキテクチャ



倖郚ナヌザヌず内郚ナヌザヌの䞡方のために、自瀟補品を倚数販売しおいる䌚瀟を想像しおください。 ほずんどの堎合、各補品は、真空䞭の球圢の銬のように個別に存圚するこずはできず、ある皋床他のものず統合されたす。 その結果、それらのすべおが䞀緒になっお盞互接続された特定の局を圢成し、同時に独立しお発達する生物䜓を圢成したす。 そしお、おそらく、それらの開発は完党に異なるチヌムによっお実行されたす。



このような環境の良い䟋は、Yandex怜玢、ダむレクト、マップ、メヌル、垂盎および内郚サヌビスたたはGoogleです。 リストされた巚人が各補品にテクノロゞヌを持っおいるこずは明らかですが、䞭小䌁業を取り䞊げおより狭い分野で䜜業する堎合、Web補品は同じテクノロゞヌプログラミング蚀語、フレヌムワヌクなどで実行されるず想定できたす。



私が䌝えたいのは、そのような䌚瀟の補品ラむン党䜓のアヌキテクチャを敎理した経隓です。



圓瀟の倖郚Web補品は、 オンラむンバヌゞョン 、オヌプンリファレンスAPI 、地図䜜成、フィヌドバックサヌビスです。 内郚CRM、請求、アルゎリズム蚈算、統蚈システム、

デヌタの゚クスポヌトずむンポヌト。



2぀の抂念を導き出したす。



Webむンフラストラクチャ -盞互接続され、関連するサブゞェクト゚リアで機胜する、䌚瀟の䞀連のWeb補品。



技術基盀 -䌚瀟のWebむンフラストラクチャの単䞀コヌドベヌス。 高レベルず䜎レベルの抜象化を備えた゜フトりェアブロックのセットが含たれおいたす。 高レベルブロックは、䌚瀟のサブゞェクト゚リアの開発者チヌムによっお既に開発された゚ンティティです。 䜎レベルブロックは、たずえば、ラむブラリたたはフレヌムワヌクのセットです。



確かにあなたはそれぞれ耇数のプロゞェクトに取り組み、モゞュヌルを実装し、次のプロゞェクトで再利甚したした。 これは垞にスムヌズに進むずは限りたせん。モゞュヌルの完党に別個のバヌゞョンが別個のSVNブランチに圢成され、3番目のプロゞェクトでは、モゞュヌルの最初の2぀のバヌゞョンなどの間に䜕かを適甚する必芁がありたす。 蚀い換えるず、すべおの問題をリストアップしおいない堎合、これらは技術的基盀の品質基準です。 それらを瀺したしょう



私たちの目暙は、このようなWebむンフラストラクチャを䜜成するこずでした。 最初に始めたのは、技術基盀の準備です。 次のフレヌムワヌクずテクノロゞヌを遞択したした。



これらのシステムを遞択した理由に぀いおは説明したせん。これは別の出版物のトピックです。



技術基盀の品質基準を確保するために、階局化されたアヌキテクチャを䜜成するこずにしたした。

階局化アヌキテクチャは、システムがレむダず呌ばれる゜フトりェアサブシステムのいく぀かの順序付けられたセットで構成されるようなシステムアヌキテクチャであり、次のようなものです。



したがっお、階局化された゜フトりェアシステムでは、各局は䜕らかのデヌタ抜象化を実装できたす。 レむダヌ間の関係は、各レむダヌの反転のパラメヌタヌの倀を䞋から隣接するレむダヌに送信し、この反転の結果の出力を䞋のレむダヌから䞊に送信するこずによっお制限されたす。 耇数のレむダヌでグロヌバルデヌタを䜿甚するこずは蚱可されおいたせん。 より完党な定矩は、ファりラヌの䜜品にありたす。



ネットワヌクずサヌバヌを考慮するこずなく、これらはそれ自䜓が別個のレむダヌであるため、デバむスの技術的プラットフォヌムを考慮したす。 3぀の局を区別できたす。





図 1.テクノロゞヌプラットフォヌムアヌキテクチャのレむダヌ



図 1、3぀のレむダヌが匷調衚瀺されたす。



同時に、重芁な点は、モゞュヌルがアプリケヌション局から共通モゞュヌルのレベルに簡単に移動できるこずです。 説明は非垞に簡単です。新しいプロゞェクトが開始されるず、通垞、最も必芁な機胜が実装されたす。 プロゞェクトが発展するに぀れお、他の補品ずの぀ながりに成長し始めたすたずえば、あるプロゞェクトから他のプロゞェクトのカフェにレビュヌをプルするこずを決定したした。おそらく、他のプロゞェクトにはいく぀かのモゞュヌルが必芁になる堎合がありたす。 たたは、プロゞェクトは郚分に分割され、モゞュヌルはいく぀かのアプリケヌションに分割されたす。



yiiの詳现を考慮しお、アプリケヌション局のアプリケヌションのファむル構成をより詳现に怜蚎しおみたしょう。



 申蟌み
 	フレヌムワヌク-フレヌムワヌクはここにデプロむされたす
 	 lib-コアおよび共有のコンポヌネント。  Yii configのこのフォルダヌの別名		
		郚品
		拡匵機胜
		 ...
	保護された
		郚品
		拡匵機胜
		 ...
	公開
	テヌマ
	 config


図2.ファむル構成yiiアプリケヌション



ご芧のずおり、アプリケヌションレベルず䞀般レベル共有の䞡方にコンポヌネントず拡匵機胜がありたす。 リポゞトリからすでにアセンブルされおいるアプリケヌションの構造は次のずおりです。 もちろん、バヌゞョン管理システムではすべおを別々に線成できたす。 たずえば、すべおがアプリケヌションフォルダヌに泚がれるずきず、拡匵ラむブラリぞのシンボリックリンクが䜜成されるずきの2぀のビルドモヌドがありたす。 1぀は、すべおのアプリケヌションを曎新せずに拡匵機胜を個別にアップグレヌドできない堎合、および同じマシンに耇数のむンスタンスを展開する堎合に、異なるアプリケヌションを分離するために必芁です。 たたは、同じサヌバヌに異なるブランチを展開したす。 2぀目は、開発者がコヌドを操䜜するずきに䟿利です。



そこで、Webむンフラストラクチャに柔軟な基盀を蚭定したしたが、それで十分ですか いや 2぀の重芁なものが欠萜しおいたす。



次に、各項目に぀いお詳しく説明したす。



アプリケヌションアヌキテクチャ



アプリケヌションのアヌキテクチャもレむダヌに基づいおいたす。 次のレベルを区別したす。



図3. yiiアプリケヌションのレむダヌ



シンコントロヌラヌのレむダヌには最小限のロゞックが含たれ、拡匵APIで動䜜したす。 ビゞネスロゞック局は、拡匵局ずデヌタモデル局で構成されたす。 Yii拡匵の局ずデヌタモデルは非垞に匷力な接続性を持っおいたす。これは図の倪い矢印で瀺されおいたす。



アプリケヌションずシンコントロヌラヌの間に最倧の接続性が存圚したす。 再利甚の可胜性は最小限です。 ただし、他のアプリケヌションでビゞネスロゞックを再利甚できるため、再利甚する必芁があるため、「薄い」コントロヌラのレむダヌずビゞネスロゞックのレむダヌずの接続は、できる限り少なくする必芁がありたす。 そしお、これをYiiずその蚭定の柔軟性で実珟できたす。



構成は、必芁なコンポヌネントず拡匵機胜のセットを接続したす。 拡匵機胜を接続する䟋



'geoip' => 配列  'class' => 'application.extensions.GeoIP.CGeoIP'  、




アプリケヌションの初期化された拡匵機胜には、geoipキヌを䜿甚しおアクセスできたす。 䟋



Yii :: $ app- > geoip ;




コンポヌネントに初めおアクセスするず、CGeoIPクラスが初期化されたす。 柔軟性はキヌの存圚にありたす:-)い぀でも蚭定を介しお実装を眮き換えるこずができ、アプリケヌションは匕き続きgeoipキヌで動䜜したす。



この柔軟性に基づいお、アプリケヌションずビゞネスロゞックのレむダヌずの間の接続を簡単に管理できたす。



特定のアプリケヌションの本質を扱うロゞックを拡匵機胜にグルヌプ化するこずで、分離可胜にしたす。 したがっお、すべおのモデルは拡匵機胜にカプセル化され、アプリケヌションコントロヌラヌは拡匵機胜APIを介しおデヌタを凊理したす。



拡匵機胜は抜象化の远加レベルであり、その背埌にさたざたな拡匵機胜APIメ゜ッドの内郚䜜業に必芁なデヌタ゜ヌスを隠すこずができたす。



少し空想しお、アプリケヌションを考えおみたしょう。





図4. yiiアプリケヌションアヌキテクチャの䟋



このアプリケヌションはいく぀かの拡匵機胜で動䜜したす。 拡匵機胜はデヌタセットに察しお機胜し、モデルレむダヌず密接に関連しおいたす。 重芁なポむント蜂蜜の局間の結合の皋床は䞊から䞋に向かっお増加したす。 デヌタモデルは最も密接に関連しおいたす。



ここで、すべおの補品に察しお単䞀のナヌザヌ認蚌サヌビスを䜜成する必芁があるず想像しおみたしょう。 このようなプロゞェクトは、個別のアプリケヌションずしお簡単に実装できたす。 新しいアプリケヌションを䜿甚するために、拡匵機胜-残りのクラむアントUserServiceRestClientを䜜成したす。 クラむアントはUserExtension APIず同じAPIを持ちたす。 明確にするために写真を芋おください





図 5



UserServiceRestClientを共有レベルに配眮し、アプリケヌション構成で䜿甚されるクラスを倉曎したす。 APIは同じであるため、コヌドを倉曎せずに実装が倉曎されたした。 非垞に柔軟です 他のすべおのアプリケヌションも、UserServiceRestClientを䜿甚しおナヌザヌサヌビスず連携したす。



そのため、アヌキテクチャを把握したしたが、このアプロヌチではアプリケヌション構成がかなり倧きくなりたす。 手を䜿っおアプリケヌションのすべおの䟝存関係を登録するこずは、Jediにはたったくありたせん。 特に、プロゞェクトが存続し、デヌタベヌスの移行も発生する堎合。 これらの問題はすべお、ビルドシステムず補品展開の助けを借りお解決できたす。



展開および組み立おシステム



展開システムは䜕をすべきか



たた、ナニットテストの実行、プロゞェクトのデバッグバヌゞョンの䜜成などのタスクもすべお蚘茉しおいるわけではありたせん。趣味の問題であり、むンタヌネット䞊のこれらすべおの操䜜にはかなりの泚意が払われおいたす。 たずえば、圓瀟の展開システムは、nginx、Sphinx、RabbitMQなどの関連゜フトりェアを構成し、ドキュメントを䜜成したす。 䟿利に



䞀般に、タスクは普通ですファむル操䜜、バヌゞョン管理システムの操䜜、サヌドパヌティのナヌティリティPHPUnit、たたはDoxygenなどの起動など。蚭定の生成には泚意が必芁です。 メタ構成ファむルを䜿甚しお、テンプレヌトに埓っお䜜成したした。



 申蟌み
	保護された
		 config
		 main.php.template-yii蚭定テンプレヌト
	公開
	テヌマ
	 build.prop-メタ構成ファむル
	 build.xml-phing config 


図 6



構成を生成する際、Phingはテンプレヌトを解析し、すべおのプレヌスホルダヌをメタ構成ファむルで指定された適切なパラメヌタヌに眮き換えたす。 ずおも䟿利でした。 すべおのアプリケヌションの䟝存関係は、meta-configで蚭定されたす。



##拡匵機胜、コンポヌネントなどのリスト ##をむンストヌルする

拡匵機胜= myExt、myExt2

コンポヌネント= component1、component2

HELPERS = myHeper、myTextHelper

コマンド=




たた、デヌタベヌス、パス、ホストはmeta-configに登録されたす-䞀般的にはそれだけです。 自動化の远加の䟿利さは、これらすべおのパラメヌタヌをPhingコマンドラむンに枡しお再定矩できるこずです。 そしお、将来的には、たずえば、* nix OSのパッケヌゞのアセンブリを敎理するために。



したがっお、メタ構成ファむルは、アプリケヌション内の構成の圢匏ず数からの抜象化レむダヌです。



その結果、Yii構成の柔軟性+ビルドシステム=簡単に構成および組み立おられた補品。



たずめ



それで、そのような䜜業蚈画をこの幎に䜿甚した経隓は私たちに䜕を瀺したしたか





PSそしお、はい、ノボシビルスクずキ゚フでyii開発者を探しおいたす。 䞀緒に来お :-)



All Articles