Пожалуйста, предложите лучший дизайн этого класса контроллеров. - PullRequest
0 голосов
/ 28 августа 2011

Вот код, использующий CodeIgniter:

Проблема, с которой я сталкиваюсь:

  1. Контроллер будет иметь представление некоторых функций, и это разделены, но это все еще очень близко с самой логикой, если изменение контроллера для возврата в JSON или XML для отображения результата, кажется очень беда.

  2. Кажется, много методов, но каждый из них зависит от другого.

  3. Я думаю, что трудно отследить код.

Пожалуйста, дайте несколько предложений, спасибо. * Напоминаем, что это только класс контроллера. представление загрузки фактически подготавливает данные для представления, не отображает страницу. также модель вызова функции doXXX использует только метод модели, она не будет иметь никакого оператора SQL. MVC отделен, но контроллер также имеет функции, связанные с представлением или моделью, что делает его довольно грязным.

class User extends CI_Controller
{

public function register()
{
 //check is logged in or not 
 //if not logged in , show the register page

}

public function show_register_page()
{
//generate the UI needed data , and call the view to render, and will the user will post back a valid_register function
}

public function valid_register()
{
//do all the valid logic, if success, 
//do the do_register
//if fail, valid_register_fail
}

public function valid_register_fail()
{
 //check is logged in or not 
//show the valid register fail page
}

public function show_valid_register_fail_page()
{
//generate the UI needed data , and call the view to render
}

public function do_register()
{
//insert data in the db, the Model will be called
//if something go wrong in db, show the error page
//if everything is success, show the register success
}

public function show_db_error_page()
{
//generate the UI needed data , and call the view to render
}

public function show_register_success()
{
//generate the UI needed data , and call the view to render
}

}

1 Ответ

1 голос
/ 28 августа 2011

1.Контроллер будет иметь представление вызова некоторых функций, и он разделен, но он все еще очень близок с самой логикой, если изменение контроллера для возврата в JSON или XML для отображения результата, это кажется очень сложной задачей.

Зависит от того, как вы организовали свой код и что вы фактически передаете в представление (шаблон).Если это хорошо структурировано, у вас может быть одно представление для HTML, одно для XML и одно для json, где json обычно просто кодирует переменные представления (см. json_encode Docs ).

2.Кажется много методов, но каждый зависит от другого.

Ну, просто не делайте этого :) Имена выглядят так, словно вы хотели «закодировать это».Держите это в стороне.Сделайте те функции фактически действиями, которые выполняет пользователь:

register - that action handles the registration process

Сделайте из него контроллер входа, который обрабатывает все, что вам нужно:

login - the login action
lost_password - the lost password action
register - the registration action
activate - the registration activation action

Все остальное там не принадлежит.Нет необходимости в действии для отображения какой-либо страницы - сам контроллер может решить, какое представление выбрать.

Кроме того, вам не нужно отображать ошибки базы данных.CI заботится об этом.Просто вкладывайте только то, что нужно, и будьте проще.Это должно помочь вам сократить количество методов и их код.

3.Я думаю, что трудно отследить код.

Конечно.Слишком много функций с ненастоящими именами.Держите вещи простыми.Это нелегко, но придавайте именам и уменьшайте общую логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...