web-dev-qa-db-ja.com

PHPリファレンスアーキテクチャ/デザイン/フォルダ構造

現在私はPHP=を使用してサーバークライアントアプリケーションを開発しています。そのため、実装プロセスをガイドするリファレンスアーキテクチャを設計しています。

私は新しい平均スタックフォルダー structure と、それを行うコンポーネント/モジュールの方法が本当に好きですが、ここでも多くの苦労をしています。

例として:

/<project-name>
    index.php
    /static
        /css
            /main.css
        /js
            /user
                userFunctions.js
        /bower_components 
            /jquery
            /chart
            /fontawesome
            /template-engine
            ...
    /scripts
        /debug.php
        /checkCodingStyle.php
    /modules
        /user
            userDetailsController.php
            userListController.php
            userDetailsView.php
            userListView.php
            user.php
            userDao.php 
    /utils
        /db
            mysql.php
        /log
            log.php
        /lib
    /tests
        userUnitTest.php

「user」と呼ばれる1つのモジュールがあり、データモデルuser.phpに基づいて、2つの異なるビューとコントローラーを備えています。データアクセスオブジェクトuserDao.phpを呼び出すデータベースからモデルにアクセスできます。

MVC + Daoを使用すると、アプリのコンテンツとロジックを個別に分離でき、モジュール間の疎結合と各モジュール内の強力な結合を可能にします。

だが:

モデルのユーザーは、他のモジュールでも必要になるかもしれません。モジュールイベントがあるとしましょう。データモデルuser.phpを再利用したいと思います。ユーザー選択リストを使用するといいでしょう。 userListView.php

それ、どうやったら出来るの? userListView.phpには必要なものがすべて含まれていますが、userListController.php

別のモジュールからデータモデルを呼び出して別のモジュールコントローラーで再利用するのは間違っていますか?

1つのモジュールが呼び出すことができるサービスのように、モジュール間のインターフェースを構築するより良い方法はありますか?

2
Andre

あなたが経験する苦労のほとんどは、フレームワークを使用することで簡単に回避できると思います。したがって、プロジェクトで必要最小限のPHPを使用するのでない限り、フレームワークを使用してください。

オープンソースフレームワークを作成する人々は、この種の問題を解決するために時間を費やしているので、ファイルの編成方法の変更に費やすのではなく、楽しいことに集中できます。

PHPの場合、Symfonyプロジェクトをご覧になることをお勧めします:
https://symfony.com/six-good-reasons

多くのプロジェクトがsymfonyに基づいているか、またはそのコンポーネントを使用しているため、学ぶことができる大きなコードベースがあります。

ビジネスロジックの整理に関する情報を含むベストプラクティスのリストもあります。
https://symfony.com/doc/current/best_practices/index.html

フレームワークにまだ懐疑的で、フレームワークを使用せずに続行したい場合は、次の一連の記事もお勧めします。

独自のPHPフレームワークを作成する
http://symfony.com/doc/current/create_framework/index.html

お役に立てれば!

2
Jacek Kobus