検索
ホームページバックエンド開発PHPチュートリアルyaf に基づくモジュール型開発ソリューション

ウェブサイトのトラフィックが増加し、ユーザーが増え、ニーズがますます複雑になるにつれて、製品開発期間中、ワンストップ開発ではビジネス開発のニーズをサポートできなくなります。技術的なアーキテクチャがビジネスの発展を制限しており、研究開発担当者にとっては耐えられない問題が増えています。ビジネス。

まず次のワンストップ開発が直面するであろう問題をまとめてみましょう:

1. コードの量が多く、開発、デプロイ、テストのすべてが問題になります

これは理解しやすいです、私たちのビジネス開発・導入・テストには大きなリスクが伴うことがあります。例えば、開発においては、プロジェクトに最初から参加しているメンバーであっても、事業規模が大きくなるとリスクのコントロールが困難になることがあります。大量のデプロイメントなど、ボリュームが大きいため、コードのリリースが非常に遅くなります。リリース プラットフォームでは、まずコードをパッケージ化して、オンライン サーバー上で解凍します。オンラインで問題が発生すると、ロールバックのコストが高くなり、その影響も大きくなります。リリース システムが深刻になるだけでなく、サービスの利用不能にもつながります。

2. ビジネス開発を大幅に制限する

開発者は、開発プロセス中に習慣的にパブリック関数をクラスまたはメソッドにカプセル化する傾向があり、これがコア関数である場合、システム全体に現れる可能性があります。機能の発達が必要であり、それは全身に影響を及ぼし、システムの再構築に直面する可能性があります。

非常に簡単な例を見てみましょう。

関数 (またはクラス) があるとします。

function custom_function($a,$b) {//TODO}

は、最初は現在のビジネスに合わせて基本的な機能を実装しますが、ビジネスが発展するにつれて、この基本的な機能はより強力になります。ビジネスをサポートするために、次のようなパラメータに応じて機能拡張の互換性を持たせています。後で?もちろん、私たちには聞こえませんが、それは将来の世代を非常に不幸にします。

3. 打倒と再構築を強いられる

さまざまなプレッシャーに基づいて、さらに重要なことに、事業開発のプレッシャーに基づいて、私たちはシステム全体を苦痛を伴う再構築するしかありませんでした。このプロセスは一方では長くて苦痛です。一方で、既存のシステム ビジネスをサポートしなければならない一方で、システム全体を技術的に再構築してそれらの結合を弱める必要があり、このコストとリスクが私たちを悲惨なものにします。

それでは、プロジェクトの開始時にビジネスを複数のモジュールに分割することを検討すべきでしょうか?答えは「はい」です。しかし、それはいくつかの問題ももたらします:

1. PM はテクノロジーを理解しておらず、それを分割する方法を知りません

この問題は、計画とプロジェクトのレビュー中にテクノロジーと話し合って、ビジネスに集中することで簡単に解決できます。機能を分割する。たとえば、ユーザー関連のすべての操作はユーザー モジュールに分類され、バックグラウンド関連の操作はビュー モジュールに分類されます

2. 制御の粒度が低いとコストが増加します。

これはテクノロジーに依存します 社内で十分にコミュニケーションして計画し、境界を制御します

3. データ共有?

複数のモジュールに分割されていますが、データはシステム全体に分散しています モジュール間でデータを共有するにはどうすればよいですか?

プロジェクトの初期段階での解決策は、

- 最も基本的なデータをライブラリ モジュールに分離し、モジュール全体で呼び出すことができる最も詳細なデータ共有単位を提供します。

- ビジネス インターフェイスを提供します。クロスモジュール呼び出しの場合、たとえばモジュール A の下で、フレームワークがモジュール B の下のインターフェイスの呼び出しをサポートするようにします。

- http サービス インターフェイスを提供します。これは主にプロジェクトが成熟したときに行われます。

方向性フレームワーク内にあり、次のような特徴があります:

1. コード量が少なく、合理化されている

2. モジュール間で呼び出すことができ、モジュールにはフレームワーク実装をほとんど含める必要がありません

3.基本ライブラリ モジュール

4. 管理構成

現在のすべての PHP フレームワークでは、モジュール化されたプログラミングを実現することは依然として困難です。 フレームワークの実装には、フレームワーク内に独自のアプリケーションまたはモジュールが含まれています。

一種の完全なモジュール化もあり、各モジュール ビジネスには次のような一連のフレームワーク実装があります。ただし、一方では、これの欠点は明らかです。一方、フレームワークのメンテナンスとコード量により、モジュールがより重く見えます。

つまり、最初の方法がより採用されています。今日のテーマ yaf は実際にはそのようなアーキテクチャですが、フレームワーク ロジックは so 拡張機能で実装されています

しかし、今日説明することは、この 2 つのソリューションに基づいています。モジュールを完全に独立させるだけでなく、モジュール間でインターフェイスを呼び出すこともできます。また、基本的にモジュール内でフレームワーク コードを維持する必要はありません。フレームワークの仕様に従ってコードを記述するだけです。

每个模块之间提供interface,供其他模块直接调用,每个模块只处理自己的业务,当有业务需要共享时直接按照规范写interface就可以了。

项目目录如下:

但是yaf不支持跨模块的调用,模块与模块之间是不能通过interface来通信的,为了解决这个问题,我增加了两个类Yaf_Init和Yaf_Caller

Yaf_Init

$app = Yaf_Init::init();$app->Bootstrap()->run();

这个只是一层封装,根据目录解析出当前模块名,省去配置config.ini的烦恼,为了灵活性,Yaf_init::init()后面将增加参数可以灵活自定义配置,每一个webroot/module/index.php中都是上面的代码。

等同于下面

$config = array('application'=> array('directory' => app目录))$application = new Yaf_Application($config);$application->Bootstrap()->run();

为了能够找到app的目录,还需要在php.ini中增加一个配置,

yaf.app_path = /home/admin/web/htdocs/app/

如果访问/home/admin/web/webserver/webroot/module/index.php时,

会解析出module拼成app目录:

/home/admin/web/htdocs/app/module/传给$config.application.directory,

将$config 配置传递给yaf_application的构造函数进行初始化

Yaf_Caller

$Object = new Yaf_Caller('moduleName','className');$Object->test();

这个类用来实例化其他模块中interface的类库,其实它也是一层简单的包装,保存环境变量,切换到某模块,然后调用Yaf_loader::autoload(),该构造函数接收两个参数,第一个是模块名,第二个是interface的类名,

interface的命名规范:

/app/htdocs/moduleA/Interface/Admin.php

比如模块A提供了一个interface,类名是admin

则Admin.php的类写法

class Interface_Admin{   function test(){        //TODO   }}

其他模块调用时

//object返回的是Interface_Admin类$object = new Yaf_Caller('moduleA','Admin');它直接可以调用Interface_Admin下的public方法。$object->test();

这套方案有以下优点:

- 模块代码量小,只需要实现业务代码就可以

- 模块之间可以无缝调用inteface接口

未完待续……

原文出处:

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません