PHP MVC - это правильная структура?

0

У меня есть некоторые проблемы с пониманием mvc в php.

Структура моей папки выглядит так:

controller
|- member.php
model
|- member.php
view
|- overview.php

Мой код выглядит так:

контроллер> member.php

include '../model/member.php';

class Member{
    public function create_table_of_all_members(){
        $model = new Member();

        $members = $model->get_all_members();

        foreach ($members as $member) {
            echo $member;
        }
    }

    public function create_form(){

    }
}

модель> member.php

class Member{
    public function __construct()
     {
        // DB-Connection initialization
     }

    function getAllMembers(){
        $sql = "";
        return $result;
    }
}

view> overview.php

include '../controller/member.php';

$controller = new Member();
$controller->create_table_of_all_members();

Я на правильном пути? В папке просмотра я бы поставил, например, обзор (все страницы со столом), форму (все страницы с формой)..

  • 2
    Нет правильной или неправильной структуры, но вы, вероятно, захотите организовать вещи в модули вместо того, чтобы все было ровно, как это. Так, например, у вас может быть каталог с именем account который будет иметь каталог controllers , model и view содержащий все эти элементы для модуля account .
Теги:
model-view-controller
structure

1 ответ

1
Лучший ответ

Трудно определить, что правильно или неправильно в концептуальных дискуссиях, таких как этот. Все, что я могу вам предоставить, это мой собственный ограниченный опыт и мнение. Поглотите это своим собственным мнением и решите, что лучше для вас по вашему мнению. Создайте свою первую архитектуру, реализуйте свой первый проект, а затем ваш собственный проект начнет рассказывать вам, работает ли ваша архитектура для вас или нет. Вот несколько личных советов.


  • Я никогда ничего не выводил в браузер из любого уровня, кроме VIEW.

То есть, если вы переходите к модели MVC, попробуйте сохранить соединение между сервером и ответом на один слой, который, кажется, идеально подходит для слоя VIEW, который обрабатывает все, что угодно и от того, что пользователь (пользовательский интерфейс).


  • Изучите дополнительный шаблон дизайна, чтобы завершить свою архитектуру

На мой взгляд, MVC не является полностью работающей концепцией/архитектурой. То есть он отлично определяет ключевые ответы, но не определяет, как заставить все работать. Например, как вы определяете свою модель? Вы можете использовать Active Record (например, ваш код), или вы можете отказаться от DAO (Data Access Object). В нескольких словах различия будут такими:

class ActiveRecordModel {
    protected function connect();
    protected function create();
    protected function update();
    protected function delete();
}

class Car extends ActiveRecordModel {
    public $id;
    public $maker;
    public $model;
    public $year;
}

Таким образом, вы можете использовать $myCar->create(); и модель будет создана внутри базы данных. В отличие от DAO

class Car {
    private $id;
    private $maker;
    private $model;
    private $year;

    // Getters, Setters, Constructor
}

class CarDAO {
    public function add(Car $obj){
         // Establish connection here or at the constructor
         // Take data from $obj and arrange it to be stored.
    }
}

  • Контроллеры говорят с контроллерами, но только одна модель

Обычно я предпочитаю делать один контроллер для каждой модели, и этот контроллер будет знать, как обращаться с этой моделью (независимо от того, какой шаблон дизайна использует модель). При этом я избегаю использовать более одного модели внутри одного контроллера. Если вам нужно получить доступ к данным из модели, которая не принадлежит вам, поговорите с ней, а не в обход контроллера и перейдя непосредственно к модели. Вот что я имею в виду:

class AccountController extends GenericController {
     public function add($name, $phone, $birthday, $email, $password) {
          $accountModel = new Account();
          $accountModel->name = $name;
          $accountModel->phone = $phone;
          $accountModel->birthday = $birthday;
          $accountModel->password = $password;
          $id = $accountModel->insert();

          $emailController = new EmailController();
          $emailController->add($email, $id);
          // Here, instead of declaring a model for "Email",
          // I'm declaring the controller
          // so, in my architecture, whenever I need to change some rule
          // for some entity, I know I only have to work at one single controller.
     }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню