【问题标题】:PHP 3-tier architecture folder structure [closed]PHP 3层架构文件夹结构[关闭]
【发布时间】:2014-06-26 15:02:13
【问题描述】:

我正在用 PHP 开始一个家庭网站项目,我打算用 3 层架构来做。但是我在这种架构中找不到任何关于文件夹结构的标准/首选项的信息。我工作时使用的文件夹结构如下:

(文件夹加粗)

  • 管理员
    • 包括
      • auth.php
    • 第 1 页
      • index.php
    • page2
    • index.php
  • 包括
    • CSS
      • style.css
    • js
      • jquery-ui-10.4.0 自定义
      • javascript.js
    • responsive_gs
    • global.php
    • 标题
    • 页脚
    • bll
      • class1.bll.php
      • class2.bll.php
      • class3.php
    • 达尔
      • class1.dal.php
  • 用户
    • 包括
      • auth.php
    • 第 1 页
      • index.php
    • page2
    • index.php
  • index.php

而且感觉非常易于维护。但在我开始这个项目之前,我还是想听听一些意见。

这个问题已被搁置,因为它显然无法以客观的方式回答。抱歉,我认为这件事有一些行业标准。

【问题讨论】:

    标签: php n-tier-architecture 3-tier directory-structure


    【解决方案1】:

    看起来它不适用于 PSR-0 或 PSR-4,您可以阅读有关 PSR here 的更多信息。我认为应该练习 PSR-0 或 PSR-4,因为它允许您完成模块化文件夹结构,同时轻松创建其他人以及您可以通过最少的设置重新/使用的代码。

    我通过识别应用程序的核心组件开始为项目创建文件夹结构。例如,使用登录系统进行身份验证、注册、发送密码提醒等是很常见的……一旦我想到了一个模块,我就制作了一个或多或少遵循以下模式的composer 包:

    src/
        Assets/
            css/
            js/
            less/
            sass/
        Controllers/
            AuthController.php
            UserController.php
        Repositories/
            UserRepository.php
        Services/
        Views/
            partials/
                login.blade.php
                status-menu.blade.php
            password/
                recover.blade.php
                reset.blade.php
        MyServiceProvider.php
        routes.php
    composer.json
    

    为了让 composer 自动加载你的命名空间,你需要指定一个符合 PSR-0 或 PSR-4 的路径。例如,在我的 composer.json 文件上方的 login 包中,如下所示:

    {
        "name": "robert/login",
        "description": "description",
        "authors": [
            {
                "name": "Robert Stanfield",
                "email": "your@email.com"
            }
        ],
        "require": {
            "php": ">=5.4.0"
        },
        "autoload": {
            "psr-4": {
               "Robert\\Login\\": "src/"
            }
        },
        "minimum-stability": "stable"
    }
    

    请注意自动加载部分中的 psr-4 行...您可以通过 composer 文档了解更多信息。

    现在我将所有这些代码放在版本控制系统中,例如 SVN 或 GIT,这样我就可以在任何其他我可能会用到它的项目中使用它。

    您的主要项目可能是一个可以在项目之间重用的样板项目......像这样:

    composer.json
    index.php
    public/
    vendor/
    

    现在您可能想要创建一个 Core 包或一些类似名称,其中包含您的应用特定代码,这些代码不能在其他项目中使用。

    您的index.php 文件将如下所示:

    // Use composer's autoloader
    require('vendor/autoload.php');
    
    // Code to handle loading all your service providers...
    // maybe have like an array of service providers and then foreach over them...
    

    现在我可以简单地使用 UserRepository 类,例如通过编写以下代码:

    use Robert\Login\Repositories\UserRepository;
    
    class UserController
    {
        protected $userRepo;
    
        public function __construct(UserRepository $repo)
        {
            $this->userRepo = $repo;
        }
    
    
        public function showInactiveUsers()
        {
            $users = $this->userRepo->getInactiveUsers();
            // TODO: generate $view
            return $view;
        }
    }
    

    请记住,您可以使用 Composer 在自己的包中要求包,因此解耦代码应该没有问题。通过使用 composer,您可以获得使用 PHP 社区已经创建的包的额外好处。

    主要项目composer.json 文件应该需要您创建的包...例如,如果我的登录包位于 git://example.com/robert/login.git

    {
        "minimum-stability": "stable",
        "repositories": [
            {
                "type": "git",
                "url": "git://example.com/robert/login.git"
            }
        ],
        "require": {
            "robert/login": "dev-master"
        }
    }
    

    Composer 可以安装任何版本的包...您也可以在 composer 文档中阅读更多相关信息,它基本上适用于您的标签和分支名称 :)

    您还需要创建一个程序来编译和/或缩小您的资产,并将它们放在您的公共文件夹中。在纯 JavaScript 或 CSS 的情况下,这减少了 HTTP 请求并减少了带宽。您可以使用诸如gulp 之类的东西来完成此操作。

    希望我涵盖了所有内容...这是一个很大的想法,但很简单:)

    【讨论】:

    • 使用 Laravel 之类的框架或 MVC 之类的架构绝对是当今的最佳选择。但我还没有和他们合作过,所以这次我计划做一个简单的项目。我将完全自己编码的东西。当然,有很多方法可以对我的应用程序进行编码,但这超出了本主题的范围。也许您可以分享您如何组织文件夹?
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2019-06-14
    • 1970-01-01
    • 2011-07-30
    • 2010-12-09
    • 2012-09-12
    相关资源
    最近更新 更多