SOA、たたはMVCを超えた䞖界での生掻パヌト0

みなさんこんにちは、由良です。

今日は、゜フトりェアの蚭蚈ず開発の分野での私の経隓ずアむデアを共有し、偏芋を払拭し、「 リアクティブ 」ではない䞖界のSOA゜リュヌションの珟状を明らかにしたいず思いたす。 より少ないコヌドの曞き方、䞍満の少ない顧客、癜髪、そしおより倚くの利益を埗る方法に぀いお。 副䜜甚のない完党に実行可胜な゜リュヌションを実装し、誰もただそれを行っおいない理由。















ïŒˆàž‡ïž¡ '-'ïž ïŒ‰àž‡ãã—ãŠã€ã”æŒšæ‹¶ã€‚ あたり自由ではなく、あたり時間を䞎えないこずを決めおくれおありがずう。

私はすべおを簡朔か぀明確に述べようずしたすが、埌者は通垞私にずっおくだらないこずになりたす。



掚定コンテンツ
   0はじめに

 0.1サヌビス指向アヌキテクチャずは䜕ですか

 0.2既存の゜リュヌションの長所ず短所は䜕ですか

 0.3珟代垂堎の芁件は䜕ですか

 0.4ただ誰もこれをしおいないのはなぜですか

   1サヌビス

 1.1ドメむンずリレヌショナルモデル

 1.2コンセンサスタスクの解決

 1.3スケヌリングずシャヌディング

 1.4耐障害性

 1.5ロギングずモニタリング

 1.6怜玢ず登録

 1.7 AAA

   2ビュヌ

 2.1ハむパヌメディアの皮類ず足堎

 2.2 CQRS-ESすべおのもの

 2.3パタヌニング

 2.4プロトコルずゲヌトりェむ

 2.5カりンタヌ、レポヌト、統蚈

   3.サポヌト 

 3.1ドキュメント

 3.2䞋䜍互換性

 3.3移行

 3.4正確さ

 3.5゜リュヌションのラむフサむクル


はじめに



数幎前、バック゚ンドおよびフロント゚ンドの゜リュヌションWeb、デスクトップ、モバむルを実装するためのツヌルが䞍足しおいるずいう問題に出䌚いたした。 その時以来、たくさんの液䜓が流れおきたので、私は倚くの既存のアプロヌチに粟通し、今よりも少しだけ良いこずをする方法を考えたした。 珟圚の垂堎の状況を研究した結果、既存の゜リュヌションではアプリケヌションを完党に制埡するこずはできず、プロゞェクトアヌキテクチャ党䜓のごく䞀郚に過ぎないダミヌであるこずがわかりたした。 圌らの目暙は、クラむアントや専門家の関心を維持するこずであり、これはオフィスのコストにプラスの圱響を䞎えたす。たたはサポヌトドラッグ-スタッフのサポヌトずトレヌニングをスムヌズにする必芁があるOASIS仕様のさたざたな倉異䜓を持぀倚局ホラヌです。 埌者の最も顕著な䟋は、 WSO2スタックです。 私はそれを、垂堎で最も完党なSOA゜リュヌションであるず考えおいたす。 そのようなものをアゞャむルの方法論ず比范するこずは困難です。なぜならそれらはすべお、生きおいる人々のニヌズではなく、玙ずビゞネスプロセスを䞭心に展開するからです アゞャむルマニフェストの最初の段萜。 これらの蚘事では、SOA蚭蚈のビゞョン、珟代の垂堎ずRADの芁件に適応させる方法、およびそのようなアプロヌチの䞻な利点に぀いお説明したす。



さたざたなゞェット機のトレンドに぀いお議論するのは非垞に流行しおいたす。









写真はゞェットマニフェストから盗たれたす。 スケヌラブルでフォヌルトトレラントがあたりにも人気のある抂念であり、MongoDBの時代のようなマヌケティング䟡倀を衚しおいないためず考えられたす。 これは、いわゆる「関数型リアクティブプログラミング」FRPのコンテキストでは特に鮮明です。



実際には、これはすべお投資家の泚意を匕くための継続的なマヌケティングのかすであり、䞀般に、開発者は既補の゜リュヌションたたはなしでこの「反応性」をすべお独自に実装する必芁があるため、ほずんどの゜リュヌションは実甚的な䟡倀を衚さないこずが刀明したした既存の芁件のベストプラクティス。 完党なAAAでさえ、どこにも芋぀かりたせん。



もう1぀はSOAです。SOAを䜿甚するず、すぐに動䜜したすが、どのように動䜜するはずです。

各ベンダヌはチェスず詩人を備えた独自のSOAを備えおおり、オヌプン゜ヌス゜リュヌションではすべおがうたくいきたすが、埌で詳しく説明したすが、お互いに友達ではありたせん。 これはすぐに時代遅れになり、どういうわけか新しいコミュニティはたったく圢成されず、プロゞェクトは所有者の努力によっおのみ開発されたす。 これがSOAであり、任意のサヌビスがプロゞェクト党䜓で少なくずも100500回䜿甚できる堎合、䜿甚可胜なサヌビスずドメむンの暙準化されたリポゞトリがないのはなぜですか 既存の゜リュヌションの所有者はこれに単玔に興味がありたせん。結局、サポヌトからお金を浪費する必芁がありたす。



昚幎、マむクロサヌビスは議論するのが特に楜しいです。 これはかなり愚かな名前であり、いく぀かのプロトコルの深いカプセル化を暗瀺しおいるため、「マむクロ」ではありたせん。 したがっお、単䞀のサヌバヌたたは仮想マシン内で「マむクロサヌビス」を実行するには、遅延を増やしおバキュヌムを拡倧するだけです。 䞀般に、叀兞的なSOAでは、サヌビスが単䞀のシステムプロセスの䞀郚であるか、それずも異なるマシン䞊の独自のキュヌおよびプロトコルを備えた別個のプロセスセットずしお起動する必芁があるかどうかに違いはありたせん。これはすべお、サヌビスずその䟝存関係を登録するだけの問題です。 それで、私は「マむクロサヌビス」、たた、マヌケティング策略にすぎないこずを考えたす-より倚くのお金を埗るために明癜な叀いアむデアを「再考」する詊み。



「わかりたした、MVCの䜕が問題なのでしょうか」-あなたはおそらくそれに぀いお考えるでしょう...しかし、それは単玔なグラフィカルむンタヌフェむス甚であり、フリルがなく、手に負えないため、平凡なCRUDでも倧量のコピヌペヌストです。 MVCはサブゞェクト領域を適切に制埡せず、状態の保存ずコヌドの耇補を促進し、ロゞックコマンドずリク゚ストの分離の圹割を十分に分割せず、モデルの非正芏化を掚奚したす。 自転車は別の問題です ADR 、あらゆる皮類のECB 、 クリヌンアヌキテクチャを備えたEBI 、および六角圢アヌキテクチャテヌマのその他のバリ゚ヌション-もちろん、個々の欠陥がないわけではなく、もちろん、誰もがそのようなこずを実装する経隓ずスキルを持っおいるわけではありたせんが、圌らはMVCに固有のかなりの数の問題を解決したした。 このすべおは、ほずんどの堎合、PHPの専門家によっお過去3幎間にわたっお䜜成されたものであり、それに応じお䜕らかの圢でこのプラットフォヌムの機胜を反映しおいたす。 PHPが本圓に嫌いなわけではありたせんが、PythonずRubyのヒヌプにおける最新のバリ゚ヌションは、珟代の垂堎の芁件を完党には満たしおいたせん。



ゎヌルデンハンマヌカルトの信奉者の感情を傷぀けるこずはできるず理解しおいたすが、なぜすべおがそれほど楜芳的ではないのかが明らかになり、このテヌマで私が思い぀いたこずを瀺したす。



Fluxもありたすが、これもたた別のマヌケティング策です。

䞀般の人々のフラックスは、より耇雑な頭字語CQRS-ESに過ぎたせん。Facebookがそれを単玔化したかったからです。そうするこずで、ファンのハムスタヌの泚意を匕き、繁殖させ、平凡なコミュニティを発展させるこずができたす。これはPRに過ぎたせん。 Facebookの目暙プロゞェクトを実装するための質の高いツヌルを提䟛するのではなく、ナヌザヌのコミュニティにアむデアを䌝えお、GitHubでできるだけ倚くの束葉杖を圫るこず。



すべおの「リアクティブ」の基瀎であり、「リアクティブ」アプリケヌションの実装に最も適しおいるのはCQRS - ESパタヌンですが、玔粋な圢では圹に立たないのです。 CQRS-ESの䜿甚䞊の問題ず利点は、SOA蚭蚈のコンテキストで最もよく開瀺されるず思いたす。



珟代のSOA、そしお実際に既存のすべおのアヌキテクチャの䞻な問題は、ドメむンずドメむンモデルの定矩のかなり貧匱な抜象化です。 同期されたディスクリヌトFSMステヌトマシンの芳点からこの問題を怜蚎し、アプリケヌションの最新の芁件を考慮しお、ドメむンの決定を冗長性なしでできるだけ正確に瀺したす。



゚ノァンスが蚀ったように
問題は、これらのフレヌムワヌク、デヌタベヌス、キュヌなど、゚ンゞニアが非垞に匕き付けるものすべおではなく、䞻題領域の蚘述ずモデリングドメむンの䜜成に困難が垞に隠されおいるこずではありたせん。
アプリケヌションアヌキテクチャに関するアむデアを急に倉えたいわけではありたせんが、〜80が束葉杖、磚き䞊げられた象牙、象県现工で構成されおいるため、予算が蚱されるため、これが必芁です。そしおいいえ圌らは私たちにお金を払っお、それはうたくいきたす-なぜ新しいこずを孊ぶのですか

なぜ私はこれに぀いお感じたすか


Killjoys S01E06


「わかりたした、読曞にうんざりしおいたす。あなたの考えは䜕ですか」



最埌に、バック゚ンドずフロント゚ンドの開発ラむフサむクルは次のようになりたす。









残っおいるのは、システムにサヌビスずドメむンを远加するこずによる、蚭蚈オプションず欠萜しおいる機胜の実装です。



独自のPocket Firebaseを所有しおいるかのように、すべおの倉曎ず移行をデヌタベヌスに自動的に远加するだけでなく、モバむル、デスクトップ、およびWebアプリケヌションのスキャフォヌルディングも生成したす。すべおのビュヌ、テンプレヌト、怜蚌、プッシュ通知ず非同期UIを䜿甚したAPIのクラむアント。



珟代の機胜のほずんどは非垞にステレオタむプ化されおいるため、プロゞェクトごずにすべおをれロから曞き盎すこずは意味がありたせん。 人々がベストプラクティスを共有し、品質管理ず盞互䜜甚を暙準化できるプラットフォヌムが必芁です。 したがっお、補品の品質ずそのメンバヌの資栌を改善するために暗黙的に動機付けられたナヌザヌコミュニティを取埗し、ここに、より高いレベル、実瞟、および挫画の統蚈でゲヌミフィケヌションを远加するこずができたす...たあ、ファンタゞヌの䜙地があるこずを理解しおいたす。



そのような゜リュヌションを開発するずき、2぀の問題のある状況の発生を防ぐ必芁がありたす。これは、「委員䌚による開発」ず「仕様による開発」であり、実際にJ2EEスタックの恐ろしい肥倧化に぀ながりたした。



珟圚、開発者の䜜業を自動化するこずに興味がある人はほずんどいたせんが、既存のアプリケヌションのコヌドのほずんどは、動的プログラミングによっお自動的に生成たたは抜象化できたす。



はい...非垞に簡朔か぀簡朔に蚀えば、デヌタベヌススキヌムによれば、お気に入りのAngular'e / React'e / Ember'eなどのフロント甚のREST゚ンドポむント、クラむアントAPI、テンプレヌトをすぐに生成できたす。 最新のブラりザフレヌムワヌクのアプロヌチを実際に消化するわけではありたせんが、それに぀いおは埌で詳しく説明したす。 ナヌザヌグルヌプずその暩利を登録し、既存の蚭蚈を匕き出すこずは残っおいたす。 これが神秘䞻矩だず思うなら、 TastypieはモデルからREST゚ンドポむントを生成する方法をすでに知っおいたすが、十分な機胜がなく、パフォヌマンスが悪いためにPythonでもかなり平凡ですが、䟋ずしお䜿甚できたす。



サヌビス指向アヌキテクチャずは䜕ですか



これはアむデアです。 それは、アプリケヌションが亀換可胜な「ブラックボックス」で構成されるべきであるずいう事実にありたす-暙準化されたプロトコルずむンタヌフェヌスに埓っお互いに通信するサヌビス。



いく぀かの重芁な条件、サヌビスがありたす。



原則ずしお、最初の3぀の条件は倚かれ少なかれ明確でなければなりたせん。 サヌビスは互いに独立しおおり、共通のリ゜ヌスを共有せず、ロヌカルマシンずリモヌトマシンの䞡方のプロセス間で移行できたす。 それらは耇数のプロゞェクトで再利甚および同時に䜿甚できたす。



状態に関しおは、すべおが単玔です。サヌバヌはナヌザヌセッションに関するデヌタを保存する必芁はありたせん。これは、実行䞭のサヌビスのむンスタンス通垞は特定の時間に最小の負荷で芁求を凊理できるようにするためです。 これは、ナヌザヌリク゚ストに暗号化された「塩挬け」セッション情報を埋め蟌むこずで実行されたす。 各リク゚ストでこのペむロヌドを送信しないために、通垞、ナヌザヌセッションの短期登録甚に別のサヌビスを䜜成し、䞀時的にそれらをキャッシュしたす。 ナヌザヌセッションを保存するためのグロヌバルサヌビスを䜜成するず、 コンセンサス問題を解決する必芁がある「ボトルネック」が発生したす。これは、リク゚ストの凊理速床に非垞に悪圱響を及がしたす。



抜象化により、すべおが非垞にタむトになりたす。特定のドメむン基本スキヌムずロゞックは、䟝存するサヌビスずドメむンの特定のニヌズに応じお動的に拡匵可胜でなければなりたせん。 アカりンティングサヌビスがあり、さたざたなサヌビスが登録されおいるずしたす。䞀郚では、料金の支払いが埌払いのみである堎合ず、前払いが必芁な堎合がありたす。 これらのコンポヌネントのロゞック党䜓が絶えず倉化しおいるため、ここにさらにさたざたな割匕および節玄システムを远加し、数か月間品質の頭痛の皮になりたす。 ここでは、リレヌショナルモデルの正芏化が倧きな圹割を果たしたす。長い間、 6぀の正芏圢があったこずに泚意しおください。 サブゞェクト領域の適切な抜象化ず詳现化により、新しいロゞックを導入したり、既存のロゞックを倉曎したりする耇雑さが軜枛されたすが、次のパヌトではさらに詳しく説明したす。



いく぀かの「郚䞋」ず「マネヌゞャヌ」間でサヌビスぞのアクセスを共有する可胜性は、接続性の悪さや共有状態の欠劂の芁件に基づいおいたす。 すべおは、マルチスレッドプログラミングや「競合」状態を防ぐ方法ず同じです。 たた、ドメむン拡匵の堎合にも蚀及する必芁がありたす。拡匵ドメむンを耇数のサヌビスず共有する堎合、互換性の問題がありたす。 䞀般に、倧たかに蚀っお、あるサヌビスが1぀の数のフィヌルドず状態列挙の倀を持぀プレヌトを必芁ずし、別のサヌビスが完党に異なるものを持぀堎合、およびこのプレヌトを共有するずきに問題が発生しないように「友達を䜜る」方法、たたは他のリ゜ヌス。



他のすべおの人の䜜業、および゚ラヌ発生時の動䜜を担圓する倚くのシステム「ルヌト」サヌビスがありたす。 それらの1぀は、 キャップを登録しおサヌビスの新しいむンスタンスを起動し、実装ず正確性のテストを実行し、゚ラヌが発生した堎合に以前のバヌゞョンにロヌルバックできるレゞストラヌです。 Erlang 'eず同様に3䞀般に、SOAは倚くの点でOTPモデルに非垞に䌌おいたすが、倚くの点で欠けおいたす。



このメモで、SOAの目的ず芁件のレビュヌを完了するこずができるず思いたす。

必芁に応じお、ここに䜕か他のものを远加したす。



これは、サヌビス指向アヌキテクチャの構造を䞀般的にどのように衚珟するかを瀺した図です。









ルヌトサヌビスの目的を芋おみたしょう。



これらの各サヌビスには独自の蚭蚈゜フトりェア機胜があり、以䞋の蚘事ですべおの詳现を説明しようずしたす。䜕も芋逃さないこずを望みたす。



すべおのプロゞェクトには少なくずもRegistrar 、 Archivist 、 Resource Manager 、およびAAAが含たれおいる必芁がありたすが、おそらくより良い名前を思い付くこずができたす。 最埌の2぀は、拡匵可胜ドメむンの実装の耇雑さに関連するいく぀かの理由で芋萜ずされおいたすhi cocaine 。



既存の゜リュヌションの長所ず短所は䜕ですか



珟圚、本栌的なSOAはありたせん。どこかで䜕かが欠けおいたす。

ハむパヌメディアタむプによるコヌド生成に぀いおは、䞀般に歎史は静かです。



私が働いた



もちろん、J2EEスタックの堎合、ひどい冗長性が芳察され、WSOもJBossも高負荷には適しおいたせん。 たた、䞀般に、「匱いバむンディング」 は 、最新のパフ化されたj2ee EJBパンにはあたり適しおいたせん 。



私は個人的に、CocaineずBluemixは郚分的にのみSOA゜リュヌションに関連しおいたす。DIYに満ちた既存のサヌバヌの盞互䜜甚を実装および暙準化する既補のシステムはありたせん。 コカむンの堎合、 ロケヌタヌがありたすが、かなり初歩的なものですが、少なくずも䜕かがあればいいのです。 Bluemixでは、適切なSOIを実装できたすが、少しプレむする必芁もありたす。 SOIの芳点から芋るず、Amazonのサヌビスは最も柔軟です。



すべおのベンダヌは、PaaSにのみむンフラストラクチャを展開するこずを提案しおいたす。これは、OracleおよびそのIntegration Cloud Serviceの堎合に特に顕著です。 SOA゜リュヌションのほずんどのナヌザヌはすべおのサヌバヌが同じデヌタセンタヌ内にある必芁があり、通信の遅延は最小限であるこずを理解する必芁がありたす-倚くの堎合、CDNやその他の分散ゞャンクを自分で敎理する必芁があり、远加のベンダヌロックむンはデヌタセンタヌを遞択するずきに手を瞛るだけです。 すでに、AmazonずAzureは萜ちたした-真面目で責任のある顧客は自分でリスクを管理する方が良いですが、普通の人にずっおは十分であり、「圌らは働き始め、 飲んで䌑んで䌑みを取り、萜ち着くたで埅ちたす、呌び出しは午前4時に始たりたす...」、通垞95それが起こる方法をケヌス。 そしお、デゞタルオヌシャン、リノヌド、online.net、たたはovhで自家補のSOIを䜿っお12枚のはげたデディックを撮圱し、必芁に応じおそれらをゞャグリングする方が安䟡です。



BPEL / BPMNは別のトピックです圌らは秘曞のビゞネスプロセスを蚘述するための蚀語を曞き蟌もうずしたしたが、暙準では提䟛されおいない倚くの偎面の理解できないものを埗たした。蚀語仕様自䜓を線集せずに実装するこずはほずんど䞍可胜です これを行うには、OASISに連絡し、コン゜ヌシアムに参加し、RFCを発行する必芁がありたす...たあ、タスクの解決策ず盎接関係するこずはありたせんが、蚱容できる時間枠内で珟代の垂堎の芁件に適応できない倚面的なモノリシック暙準の存圚に察する料金のみです。 奜きな蚀語で、すべおを手で取り、曞くのが簡単です。 有限状態マシンFSMの芳点から考えるず、ビゞネスプロセスの説明を倧幅に簡略化できたす。



既存の゜リュヌションの䞻な利点は、蜂蜜で䜿甚するのに十分なベンダヌからの保蚌です。 セクタヌおよび郚分的に倖囜の状態で。 自動車業界-このような厳しい垂堎芁件はなく、「最新のファッショントレンド」に埓う必芁もありたせん。 そのため、新しいプロゞェクトの実装、さらにはスタヌトアップずいう蚀葉を恐れず、これらの゜リュヌションずプラットフォヌムは適切ではありたせん。



たた、本栌的なSOAずしお、叀き良きSAPを怜蚎するこずもできたす。

しかし、サポヌトポリシヌ、コスト、継続的な陳腐化、パフォヌマンスの䜎䞋、セキュリティに察する平凡な態床を考えるず、この解決策を怜蚎するこずすらありたせん。











珟代垂堎の芁件は䜕ですか



基本的に、圌らは



原則ずしお、この堎合のSOAはほが理想的な゜リュヌションであり、遅かれ早かれ、人気のあるMVCフレヌムワヌクから開発を開始し、さたざたなメッセヌゞずタスクキュヌを远加し、プロセス間通信を実装し、開発者はCQRS-ESでバむクからSOAにスラむドしたす ' , .



, , . « » — . SOA «» « » - , «».



?



難しいからです

これをすべお入力するには、DDDおよび゚ンタヌプラむズアプリケヌションテンプレヌトに関する曞籍を数冊読むだけでは十分ではありたせん。すべおを実践し、たくさんのバンプを埋める必芁がありたす。 »ほずんどの既存のOpenSourceプロゞェクトでは実装されおいないため、独自の基盀ずするこずはできたせん。



SOA IPC , Discovery (). « » Symfony2 Meteor.js — , , - scaffolding, . - Gearmand / Beanstalk / RabbitMQ etc - - SOA. , , AMQP — OASIS'a . protobuf'a, .



App Data over Avian Carriers with Quality of Service

XMPP , BOSH « ejabberd! erlang! !». - , 20% . IP UNIX - IP , .



Scaling /dev/null

" , Go ". «And we've never had another colossal clusterf**k since». , : 100% — . C#/Java . — bytecode enhancing . , DataNucleus - Hibernate . — , , , — , -, . Rust'e — , Go ( «duck typing»).



, , .



, MV--- ?



私が察凊しなければならなかったプロゞェクトの80には、通垞の正芏化されたリレヌショナルモデルがありたせん。最初のステップは、モデルを6番目のフォヌムたで正芏化し、タブレットず列に名前を付けるための読み取り可胜なルヌルを受け入れるこずです。



なぜなら



耇雑で倧芏暡なク゚リの堎合、実䜓化された衚珟を䜿甚する䟡倀がありたす。これにより、プロファむラの時間を少し節玄できたす。モデルの非正芏化に぀いお考える前に、䞀時的な衚珟に䞭間結果を保存するこずを考えおください。



正芏化されたデヌタベヌスを䜿甚するず、CRUDに察しおこのようなルヌタヌを発行できたす。

GET /plural($tableName) //     GET /plural($tableName)/page/$pageNumber //     GET /plural($tableName)/page/$pageNumber/size/$pageSize //       GET /plural($tableName)/where/$fieldName/$value //         GET /$tableName/$id //    $id GET /$tableName/$id/plural($referencedTableName) //         $id POST /$tableName/$id //    ID PUT /$tableName //    PUT /$tableName/$id/$referencedTableName/$referenced_id //      ManyToMany  DELETE /$tableName/$id //    $id DELETE /$tableName/$id/$referencedTableName/$referenced_id //      ManyToMany 
      
      





折り畳たれたキヌの堎合、$ id1_id2_id3任意のようなものを考えるこずができたす。たずえば、アルファベット順でキヌ列を取埗したす。 もちろん、最初にデヌタベヌススキヌマを読み取り、それを䜿甚しおルヌタヌを怜蚌する必芁がありたす。そうしないず、ブラむンドSQLむンゞェクションが倧量に発生したす。



さお、テスト、テスト、プロファむリング、テスト実行時間の短瞮、リファクタリング、再床テストを行いたす。



前述のTastyPieは同じ原理で動䜜したす。



OK、JSフロント゚ンドはどうですか



JSフロント゚ンドでは、私はただ䜕をどこで理解しおいないのですか。

䞀方で、あらゆる皮類の暙準、プリプロセッサ、ポストプロセッサが非垞に倚くありたすが、䞀方で、それらは開発をたったく単玔化したせん。 既存の゜リュヌションのほずんどは、テンプレヌトを耇補しおブラりザに転送する必芁がありたす。その埌、手でEventSourcingを敎理し、JSでモデルを郚分的に耇補し、怜蚌を実行する必芁がありたす。



倚くの堎合、既存のツヌルの開発を倖郚から芳察するず、遠くに行くほど難しくなり、実際の問題の解決にたすたす集䞭しおいないずいう印象を受けたす。 同時に、既存のすべおのフロント゚ンドプロゞェクトは非垞に倚くの投資を集めおおり、数千䞇のU. Dmurdish e-cuに぀いお話し、自分自身に泚目を集めようずしおいたす。



これたでのずころ、ノヌドに「同圢」レンダラヌを䜿甚しおReact.jsを停止しおいたすが、かなり気分が悪くなりたす。 ここでの問題は、通垞のUXの堎合はサヌバヌずクラむアントの䞡方でレンダリングする必芁があり、 prerender.ioのようなさたざたなWebキットのサロゲヌトには正垞なパフォヌマンスがないこずです。



私は、最近のJSフロント゚ンドが他の環境で特にレンダリングされないずいう理由だけで、node.jsをスカルプトしない理由を本圓に理解しおいない人の1人です。 ここでは、原則ずしお、jsonでhtmlを远い抜くこずを劚げるものはありたせん。Web゜ケットずロングポヌリングを介しお、リンクをクリックするずきに、テンプレヌトず倉曎をペヌゞに転送したす。 次に、「パッチ」を珟圚のDOMツリヌに適甚したす。ペヌゞ䞊のルヌティングやモデルを気にする必芁はありたせん。フォヌムを怜蚌するためのルヌルは、data- *属性ず正芏衚珟で蚘述できたす。 コレクションずテンプレヌトのすべおの倉曎はサヌバヌ偎で既に远跡され、レンダリングされたパッチを送信できるため、VirtualDOMはすぐに必芁ありたせん。



たあ、䞀般的には、おなじみのjinja / twig'ahや他のctppでテンプレヌトを䜜成し、ペヌゞごずに1぀のJSずコレクションを管理するための専甚コントロヌラヌを远加したした。 確かに、そのようなこずは、EventSourcingが利甚可胜な堎合にのみプッシュ通知で完党に機胜したす。 したがっお、ブラりザの偎からモデルずビュヌを耇補する必芁はありたせんが、これは非垞に倧きな䜜業です。 アむデアが明確であるこずを願っおいたす。



テンプレヌト゚ンゞンからHTMLペヌゞを同様のJSONずしお転送できたす

 { "action": "append|remove|replace", "selector": "#HaveANiceDay", "tagName": { // optional "attrs": [ { "name": "value" }, "name", ], "content": { {"otherTagName": { ... }}, }, }, }
      
      





この方法でブラりザベヌスのテンプレヌトおよびコレクション管理を実行する最新のMVCフレヌムワヌクの䞀郚ずしお、JSフロント゚ンド甚の既存のツヌルを知りたせん。 コレクション管理ずESはすでにMeteor.jsにありたすが、䟋倖である可胜性が高く、Yandexはどこかに䌌たようなものを持っおいたした...



わかった これは玹介には十分です。



私はそれがあたりにも退屈ではないこずを願っおいたす、私は䜕か新しいこずを話し、あなた自身のために考えるように促すこずができたした。

楜しい時間をお過ごしください。



必芁に応じお、ここに䜕かを远加し、゚ラヌを修正しお明確にしたす。

すべおのコメントは午埌に送信されたすが、コメントを散らかさないでください。



All Articles