私は IT オタクで、高校生の頃から独自の SNS ソーシャルの旅を始めました。ここ7~8年は、笑顔や汗、悲しみなどをSNSでの交流に費やしてきた。光を求めて外出したときは、写真を数枚撮ってSNSにシェアします。心に少しでも感情があれば、SNSに晒します。それをSNSに投稿して吐き出す。徐々に、SNS からランダムなジョークを探したり、有名な作家の SNS から文学や芸術の才能を獲得したり、IT 業界の大物たちの SNS から業界のトレンドや新鮮な知識を吸収したりすることに慣れてきました。数あるSNSソーシャルシステムの中で、私が最初に触れたオープンソースソーシャルSNSは、web2.0版をベースに開発されたThinkSNSでした。
いくつかのインターネット検索を通じて、Zhihu などの関連 Web サイトには ThinkSNS に関する専門的な技術情報が比較的少ないことがわかりました。多くのプログラマは、ThinkSNS に関する技術文書を検索したいと思っていますが、それを入手できません。したがって、私は ThinkSNS テクノロジーについてこの記事を書き、ThinkSNS を好む多くの起業家と共有し、開発者に独自の技術的な洞察を提供することもできました。
何ですか? まず、TSとは何かについて知っておきましょう。TSとは「ThinkSNS」の略称で、TS番組が好きな人をTSerと呼びます。 TS はオープン ソース プログラムであり、コード ホスティング プラットフォームは GitHub です。詳細な変更はすべて透過的に更新されます。 ユーザーは、公式 Web サイト (http://www.thinksns.com)、公式デモ コミュニティ (デモ サイト http://demo.thinksns.com)、および GitHub リポジトリ (https://github.com) を使用できます。 /medz /ThinkSNS-4) TS の最新の開発トレンドを入手します ~ もちろん、興味がある場合は、開発者がコードを取得した後、公開条件を満たす場合は、TS 開発者に requestTS (略して PR) コードをプルすることもできます。ソース要件に応じて TS バージョンにマージされます。一般ユーザーが問題に遭遇した場合は、デモ サイトまたは Github に問題を送信すると、開発者から統一された応答が届きます。 TSのPHPバージョンの要件は比較的低く、基本的な業界はphp5.5またはphp5.6の段階に入っています~ただし、国内のニッチな仮想ホストのほとんどと、関連する専門知識を知らない多くの人々を考慮して、TSは引き下げられましたphpのバージョンをphp5.3.12にします~ もちろん、なぜマイナーバージョンが12なのか考える人もいます。このバージョンはphp5.3の最初の安定バージョンです~ つまり、このマイナーバージョンより前のバージョンは安定バージョンではないため、インストールして使用することはお勧めしません。
2. LaravelFramework
Eloquent ORM と TP Framework TS は、2016 年の開発プロセス中に、基盤となるアーキテクチャに比較的大きな変更を加えました。ご存知のとおり、TS の最下層は ThinkPHP フレームワークに基づいて変更されています。ユーザーが ThinkPHP に基づいて TS を直接アップグレードできない主な理由の 1 つは、TP フレームワークが MIT オープン ソース プロトコルに完全に従っていないことです。もちろん、開発者にとって、TP フレームワークの技術アーキテクチャ自体にも、十分に進んでいない、抽象的すぎるという問題があります。そのため、TSでは総合的に検討した結果、LaravelフレームワークのEloquent ORMをデータ交換に利用しています。 Eloquent ORM の利点は何ですか?この ORM のデータ処理は Node.js のデータ処理と似ており、すべてがオブジェクトであり、ORM のデータ関係の処理効率は Doctrine に劣らないため、TS はこの方法を選択しました。もちろん、将来のより高度なアーキテクチャに備えることもさらに考慮する必要があります。 TS は開発に拡張方式を徐々に採用し、TS プログラム全体でアーキテクチャ上のデータ交換を実行します。 新しい ORM の導入により、TS は php7 プラットフォームの実行を検討しましたが、php7 では MySQL 接続メソッドが完全に削除され、PDO と MySQLi だけが残されました。その後、php7環境で実行したい場合はDBクラスを再修正する必要がありますが、現在は互換性の問題を考慮して、古いアプリケーションではまだモデルによってSQLが生成されてからSQLが渡されます。実行のために PDO に転送します。新しく開発されるアプリケーションや機能は、すべて新しい ORM データを使用して開発されます。
3. TS技術的な利点と拡張
新しい ORM の導入に加えて、TS には、理解しやすく統合しやすい基本クラスがあるなど、多くの技術的な利点もあります。これらの基本クラスはサードパーティのライブラリに基づいて再カプセル化されるため、TS モジュール開発で設定される属性がより標準になり、開発を開始しやすくなります。なぜなら、サードパーティのクラスを統合するために開発者が継承やその他の作業を行う場合、国の状況によれば、これはほぼ不可能だからです。これに基づいて、開発者は基本クラスを見るだけで、統合後に何をする必要があるかを知ることができ、サードパーティのクラスを学ぶ必要はありません。
TS の新しい拡張機能 (現在はアプリケーション) では、元の静的リソースはアプリケーションの下のリソースを直接参照します。新しいアーキテクチャでは、TS アプリケーションは外部呼び出しを容易にするためにパブリック キャッシュ ディレクトリに一律に移動されます。この設計は、TS をより安全にするためのものです。このようにして、ユーザーはコードを公開せずにアプリケーションに埋め込まれた静的リソースを取得でき、Web マスターや開発者は公開されたディレクトリの上位層に非公開コードをより安全に保持し、隠すことができます。
では、TS には具体的にどのような機能があるのでしょうか?この問題は基本的に意見の問題です。 TSはオールインワンであるため、コアのソーシャル機能に加えて、図に示すように、マイクロバー、チャネル、情報、アクティビティ、ショッピングモールなども備えており、さまざまな業界属性を持つ多くのTS協力製品も備えています:
4. チャットとトレンドはソーシャル インタラクションの核心です
TS には独自に開発されたネイティブ インスタント チャット システムがあります。私たちは、チャットと指示が社会的交流の中核であることを知っています。 PC では、TS は JS ポーリングを使用してメッセージ受信やその他の操作を実行します。モバイル端末では、TS はユーザーの記録が失われないようにし、P2P ポイントツーポイント送信を回避するために、高度なテクノロジーを使用します。プログラムはクライアントによって実行されます。クライアントはメッセージをサーバーにプッシュし、サーバーはメッセージを別のクライアントに転送してデータベースに保存することで、複数のクライアントから同時に到着するという目標を達成します。
5. TS
の基本的な技術的なポイント 実用的な情報がなければ、分析は単なる不正です。次にTSの基本的な技術ポイントについてお話します。 TS では、アプリケーションには構成ファイルがあります。現在のアプリケーション ディレクトリは apps/
これは比較的新しいアプリケーション構成であることがわかります。古いアプリケーションでは、「リソース」項目を構成するだけで、静的リソースが「storage/app/<」にキャッシュされます。アプリ名>「」の下に開発者モードを設定すると、アクセスするたびにここに移動するため、storage/appディレクトリは公開ディレクトリになります。 上記を実現するには、新しいアプリケーション インストール クラスについて言及する必要があります。名前空間は TSHelperAppInstall です。新しいアプリケーション メカニズム (現在は静的リソース キャッシュ) でいくつかの処理が行われており、アプリケーション ランナーもこの名前空間の下にあります。リアルタイム ランナー「TSHelperController」は、アプリ名、コントローラー名、およびアクション名を渡すだけで、Composer を通じてアプリケーションによって登録された名前空間を見つけて、必要なコントローラー コードを実行します。 そういえば、Composer パッケージ管理ツールという重要な技術的な追加について触れなければなりません。 Composer は、すべての言語パッケージ管理ツールの中で最高のツールであると言えます。PSR-0 および PSR-4 仕様に準拠した AutoLoader ツールに加え、サードパーティ パッケージの標準化された統合、アップグレード、アンインストールを提供します。これにより、必要なクラス ファイルやライブラリ ファイルを見つけるために TS で冗長なカスタム自動ロードを行う必要がなくなり、Composer を使用して直接登録できます。最も単純な例を使って説明しましょう: TS 開発チームは新しい Web アプリケーションを開発していると考えられますが、重要なコードは apps/
本題に戻りますが、TS はどのようにしてコントローラーを見つけましたか?
実際、TS が行うことは非常に簡単です。「アプリ<アプリ名><コントローラー名>」のクラスを構築し、このクラスをアプリケーション開発中に Composer を通じて自動ロードするように登録します。このアプリケーションの標準は PSR-4 であるため、src ディレクトリだけでなく任意のディレクトリにコードを配置できます。このディレクトリは TS プログラムには知られていませんが、Composer はそれを知っているため、TS は「Composer が何であるかを尋ねる」だけで済みます。利用可能。
この新しいテクノロジーの導入により、重労働な開発作業が軽減されるだけでなく、TS コード自体が簡素化されます。TS コード自体に関係のないことは気にならなくなり、独自のコードの開発だけに集中すればよいためです。一部。サードパーティのライブラリを除いた TS コード パッケージは、昨年の 24MB から現在は 21MB に減りました。なぜまだこれほど大きいのでしょうか? TS は新しいテクノロジーを使用しながら古いモジュールの動作要件を考慮する必要があるため、古いモジュールをすべて再開発する必要がないため、現時点ではできることは何もありません。子供を産んだ後、子供が醜くなったら、詰め込んで新しい子供を産めば良いとは必ずしも言えません。
TS の変更の焦点は ORM の追加です。では、新しいデータ モデルをどのように使用するか?基本的な継承コードは次のとおりです:
そうです、コメントを含めると 20 行しかかかりません。これと前のモデルの継承の違いは何でしょうか。 1 つの違いは、渡されるパラメーターの変更が、MySQL、SqlLite、SQL サーバー、およびその他のデータベース間の自由な切り替えをサポートしていることです。もう 1 つの違いは、定義されたキーワードの変更にあります。モデルを定義すると、テーブル上で頻繁に操作できるようになります。上の表では、feed_id が 1 であるデータのクエリは非常に簡単で、Feed::find(1) です。 OK、クエリは完了しました。もちろん、返されるのはオブジェクトであり、純粋なデータの配列ではありません。
それを必要な配列に変換したい場合、たとえば $feed が上記のクエリによって返されたデータである場合、これを行うには $feed->toArray() だけが必要です。テーブルのフィールドがわかれば、クエリされたデータを $feed->feed_id や $feed->cTime などのオブジェクト メンバーとして直接読み取ることも、このオブジェクトを Foreach に直接渡すこともできます。これにより、新しい ORM はデータを処理するときに以前のように配列を操作する必要がなく、以前のベースでトラバーサルを変更せずに維持できることがわかります。
もちろん、より具体的な用途については、Laravel フレームワークの公式ドキュメントを確認し、ORM の関係の別の例を示すことができます。
公開関数phone()
{
Return $this->hasOne('Phone');
}
上記のメソッドでそのようなメソッドを定義し、電話モデルを 1 対 1 に関連付けます。$data = Feed::find(1)->phone、電話の主キー feed_id と同じ値を取得できます。フィードテーブルテーブルオブジェクト。とても便利ではないでしょうか?
最後に、コントローラーについて話しましょう。「TSBaseNoneController」という基本クラスが TS 内にカプセル化され、「App<アプリ名>ControllerNone」というコントローラー クラスを定義し、それを継承します。アプリケーションが存在しないコントローラーにアクセスすると、このコントローラーにリダイレクトされます。したがって、これを使用すると、さまざまな予想外の方法を開発できます。
6. ThinkSNS はオープンソースであるだけでなく、ビジネス アクセラレータでもあります
この記事の紹介を通じて TS を本当に理解できたかどうかはわかりませんが、これはほんのまれな部分ですTSの影響もありますが、これも無視できません。
TS は成長し、起業家に力と加速を与えるために最善を尽くしています。
概要: TS は高度なアーキテクチャを備えており、コードは PSR 仕様に準拠しており、使いやすく、高い互換性を備えているため、起業家は TS をビジネス ニーズに合わせて簡単に調整でき、開発者は非常に短期間で開始できます。
技術者や起業家にとって時間は最も高価なコストです。ThinkSNS の希望と目的は、起業家や開発者がやるべきことに集中できるようにすることです。
|