-2

PHP経由でフレームワークを使用せずにWebアプリケーションを開発しました。私のアプリケーションには、主にフロントエンドとバックエンドの 2 種類のファイルがあります。最初のタイプには、HTML、PHP、CSS、JavaScript (jQuery)、およびバックエンド (PHP のみ) を含めることができます。pg_db_connectionデータベースに接続する 1 つのクラスとsession、ユーザーの Web セッション (php の関数session_start()) を作成し、「ユーザー名」、usersデータベース テーブル内のユーザー ID などの変数を保持する 1 つのクラスがあります。

pg_db_connectionクラスには、 から取得したデータベース リソースであるプロパティが$linkありますpg_connect()。このクラスには、 、 、 、 、 などのquery($query, $b_result = false, &$affected_rows = null)関数insert($table, $values, $columns = null, &$affected_rows = null)begin()ありcommit()ますrollback()。すべてのフロントエンド ファイルの先頭で、型のオブジェクトを作成sessionして実行します。

$db = new pg_db_connection($db_config,$log_mng);
$session = new session($db);

#if the session is not active go to login.php frontend and force the user to login
if(!$session->is_active())
{
    header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI']));
    exit;
}


# If session is active proceed below
# Auto refresh the session
$session->autoReresh();

# Check if the current user have privileges to access this frontend file (second param is file path, third - file name)
if(!($session->passpermit($session->user_id(), $_SERVER['SERVER_ADDR'], dirname(__FILE__)."/", basename(__FILE__))))
{
    header("Location: /html/admin/access_denied.html");
    exit;
}

セッション クラス ストアuser_id, usernameなどを$_SESSION. Web ユーザーがアクセス権限を持つファイルはデータベースに保存されるため、データベースへの接続が必要です。このフロントエンド ファイルに動的データをロードする場合は、jQuerypostまたはload関数を使用して、1 つのバックエンド ファイルを呼び出します。ほとんどの場合、このバックエンド ファイルには が含まれpg_db_connection、必要に応じていくつかのデータベース クエリを実行します - データに対してさらに作業を行い (HTML タグでラップするか、何らかの方法で配列をフォーマットしてjson_encodeから)、HTML または JSON をフロントエンドに取得します。ファイル。次に、jquery の load または post コールバック メソッドで、この HTML が必要な場所に書き込まれるか、JSON が何らかの方法で HTML に変換され、HTML のどこかに再び書き込まれます。

既知のアーキテクチャ パターンを使用するかどうか疑問に思っています。または、説明されているアプローチに最も近いアーキテクチャ パターンはどれですか?

4

1 に答える 1

1

私の知る限りでは、あなたのアプリケーション アーキテクチャは特定のアーキテクチャ パターンに従っていません。通常、クライアント (フロントエンド) - サーバー (バックエンド) アーキテクチャを使用し、JavaScript/Ajax リクエストを使用してフロントエンドからデータを取得します。ビジネスロジックコードのアーキテクチャを指定しないで使用します...そのため、MVCパターンなどを使用しているかどうかを判断する方法はありません...詳細については、このリンクを確認してください: https://softwareengineering.stackexchange.com /questions/158260/is-there-any-design-pattern-except-mvc-for-web

また、Web アプリケーションの設計に関する決定をよりよく理解するために、この記事を読むことをお勧めします: Web アプリケーションの設計パターン

このリンクのリストから、次の設計パターンを使用していると言えます。

  • Request-Processing : Page Controller (明らかに、認証と承認を制御する単一のエントリ クラスがあります)

  • プレゼンテーション: プレゼンターの監督 (私が正しければ、サーバーでメイン ロジックを実行しますが、UI/JSON コンテンツの置換タスクなどをフロントエンド JavaScript に委任します)

  • ページ レイアウト (UI) : Transform/Two-Step View (JSON から HTML を jQuery で作成しますよね?)

  • 永続性: トランザクション データ ストア (begin()、commit()、rollback() を使用するため)

いくつかの批判: pg_db_connectionは、postgres DB を使用する必要があることを意味していると思いますか? ...そのため、データベースを簡単に切り替えることはできません...そして、エラーが発生しやすく、セキュリティのリスクが高い低レベルの SQL クエリに対処する必要があります...カスタム セッションの処理も、多くの落とし穴があり、かなりエラーが発生しやすいものです。 .. 例えば

header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI']))

...リダイレクトの脆弱性につながる可能性があります...そして、 login.phpで何をしているのか知りたくありません...

出口について; exit()が最適では ない理由: PHP のベスト プラクティス exit()

とにかく、人々が実際に独自の Web アプリケーション アーキテクチャをゼロから作成するのではなく、PHP フレームワークに触発されたり使用したりするのには理由があります。

  • スピード開発を可能にする
  • よく整理された、再利用可能で保守可能なコードを提供する
  • フレームワーク上で実行される Web アプリはスケーラブルであるため、時間の経過とともに成長できます
  • サイトの低レベルのセキュリティに関する心配から解放されます
  • プレゼンテーションとロジックの分離を保証する MVC (Model-View-Controller) パターンに従う
  • オブジェクト指向プログラミング ツールなどの最新の Web 開発プラクティスを促進する

このブログ投稿で提示されている現在最新のフレームワークのいくつかをチェックしてください: http://www.hongkiat.com/blog/best-php-frameworks/ (これは、前述のフレームワークの使用理由のソースでもあります...)遅すぎたり、肥大化したりせずに、ユースケースに合ったもの...

于 2016-06-01T13:50:33.437 に答える