<?php
class news_backend extends cms_app {
public function __construct(){
$this->_run();
}
public function index(){
switch (@$_GET[1]){
case null : {
if (!empty($_POST['id'])){
$this->model->delNews($_POST['id']);
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->news = $this->model->findNewsAll((int)@$_GET[2], 10);
View()->title = 'Новости - список новостей';
View()->interface = 'list';
break;
}
case 'add' : {
if (!empty($_POST['name'])){
$this->model->addNews(array(
'name' => $_POST['name'],
'text' => @$_POST['text'],
'prev_text' => @$_POST['prev_text'],
'date' => @$_POST['date'],
'keywords' => @$_POST['keywords'],
'description' => @$_POST['description'],
'title' => @$_POST['title'],
));
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->title = 'Новсти - добавить новсть';
View()->interface = 'edit';
break;
}
default : {
if ($idNews = (int)@$_GET[1]){
if ($news = $this->model->findNews($idNews)) {
if (!empty($_POST['name'])){
$this->model->editNews($idNews, array(
'name' => $_POST['name'],
'text' => @$_POST['text'],
'prev_text' => @$_POST['prev_text'],
'date' => @$_POST['date'],
'keywords' => @$_POST['keywords'],
'description' => @$_POST['description'],
'title' => @$_POST['title'],
));
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->news = $news;
View()->title = 'Новсти - редактировать новсть';
View()->interface = 'edit';
} else {
CMS()->redirect(Sys()->href($_GET[0]));
}
} else {
CMS()->redirect(Sys()->href($_GET[0]));
}
break;
}
}
}
}
?>
меня код устраивает, но я хочу писать еще меньше чем здесь, какие приемы можете посоветовать.
Спустя 56 минут, 51 секунда (18.08.2011 - 22:43) blazze написал(а):
ну для начала хотя бы это нужно поменять :D
case 'add' : {
if (!empty($_POST['name'])){
$this->model->addNews(array(
'name' => $_POST['name'],
'text' => @$_POST['text'],
'prev_text' => @$_POST['prev_text'],
'date' => @$_POST['date'],
'keywords' => @$_POST['keywords'],
'description' => @$_POST['description'],
'title' => @$_POST['title'],
));
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->title = 'Новсти - добавить новсть';
View()->interface = 'edit';
break;
}
default : {
if ($idNews = (int)@$_GET[1]){
if ($news = $this->model->findNews($idNews)) {
if (!empty($_POST['name'])){
$this->model->editNews($idNews, array(
'name' => $_POST['name'],
'text' => @$_POST['text'],
'prev_text' => @$_POST['prev_text'],
'date' => @$_POST['date'],
'keywords' => @$_POST['keywords'],
'description' => @$_POST['description'],
'title' => @$_POST['title'],
));
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->news = $news;
View()->title = 'Новсти - редактировать новсть';
View()->interface = 'edit';
Спустя 44 секунды (18.08.2011 - 22:44) Russia написал(а):
blazze что именно? и на что и как? если предлагаешь то показывай.
Спустя 4 минуты, 35 секунд (18.08.2011 - 22:49) Invis1ble написал(а):
Впервые вижу такой синтаксис case

Спустя 11 минут, 49 секунд (18.08.2011 - 23:01) Russia написал(а):
Цитата (Invis1ble @ 18.08.2011 - 19:49) |
Впервые вижу такой синтаксис case blink.gif |
какой такой? Обычный switch case
Спустя 48 секунд (18.08.2011 - 23:01) blazze написал(а):
классный синтаксис
а вот если еще добавить кейсов штук 5-10 то будет вообще - ховайся


Спустя 5 минут, 10 секунд (18.08.2011 - 23:07) Russia написал(а):
blazze я знаю о кейсах, но это не проблема в данном случае, наоборот они уменьшают количество кода. Да и вообще я не для критики выложил код, а для предложений.
Спустя 6 минут, 56 секунд (18.08.2011 - 23:13) blazze написал(а):
код в двух случаях тупо одинаковый, а это означает только одно что его как минимум можно вынести в отдельный метод. второе что режет глаза что функциональный код запихнули в класс и решили что это ооп код.
Цитата |
а вот если еще добавить кейсов штук 5-10 |
это кстате, тоже не шутка тебе придется добавить еще какой-то метод обработки - добавится опять такой же код потом ты решишь поменять что-то у в одном из вариантов забудешь исправить, вобщем ситуация стандартная.
Спустя 8 минут, 42 секунды (18.08.2011 - 23:22) Russia написал(а):
будет ли разница если я вынесу кейсы в разные методы, я думаю нет, потому что это дополнительные строки кода, а во вторых это нужен будет роутер, который нужно писать и он уменьшит производительность всей системы в целом и ее защищенность. Да кейсы повторяются в приложениях это напрягает, но если я их сменю на методы, разницы не будет, их также придется прописывать.
Спустя 2 минуты, 18 секунд (18.08.2011 - 23:24) Invis1ble написал(а):
Про синтаксис я имел ввиду фигурные скобки в блоках case
Спустя 3 минуты, 54 секунды (18.08.2011 - 23:28) blazze написал(а):
вы даже не поняли что я написал постом выше.. так что если код вас устраивает, то ничего абсолютно менять не надо, т.к. код и так очень производительный.
Спустя 10 минут, 59 секунд (18.08.2011 - 23:39) Russia написал(а):
Цитата (blazze @ 18.08.2011 - 20:28) |
вы даже не поняли что я написал постом выше.. так что если код вас устраивает, то ничего абсолютно менять не надо, т.к. код и так очень производительный. |
ты что думаешь, самый умный? Если я прошу помощи не значит я тупой.
Цитата (blazze @ 18.08.2011 - 20:13) |
код в двух случаях тупо одинаковый, а это означает только одно что его как минимум можно вынести в отдельный метод. |
где он одинаковый покажи мне это, на методы взгляни и на параметры переданные в них.
Цитата (blazze @ 18.08.2011 - 20:13) |
второе что режет глаза что функциональный код запихнули в класс и решили что это ооп код. |
ах да ООП код это отсутствие кейсов, функций и прочей лабуды, так что ли?
Просто задам вопрос (будет хорошо если на него ответит linker), если я введу роутер и разобью код на отдельные методы облегчит ли это текущую ситуацию, не сделает ли это код менее универсальным?
Спустя 1 минута, 11 секунд (18.08.2011 - 23:41) Russia написал(а):
Цитата (Invis1ble @ 18.08.2011 - 20:24) |
Про синтаксис я имел ввиду фигурные скобки в блоках case |
обычно я их не использую, просто в этом коде они есть
Спустя 4 минуты, 24 секунды (18.08.2011 - 23:45) Invis1ble написал(а):
Мое имхо - тут не нужно ничего переписывать... Хотя этот вывод я делаю на основе представленного кода, что там скрывается в дебрях движка, я не в курсе.
Спустя 7 часов, 49 минут, 18 секунд (19.08.2011 - 07:34) linker написал(а):
Цитата (Invis1ble @ 18.08.2011 - 23:24) |
Про синтаксис я имел ввиду фигурные скобки в блоках case |
Это не возбраняется. Я сам иногда их ставлю на автомате, когда предполагается блок будет более чем из одной строки.
А вообще, избавляться от switch case и разбивать на отдельные action-методы. Т.е. если это index, то он должен только отображать, все остальные действия: добавление, редактирование, удаление должны лежать в раздельных местах и ничего не знать друг о друге. Даже пускай они в одном файле, но в разных action-методах. Вариантов много.
Спустя 21 минута, 20 секунд (19.08.2011 - 07:56) kirik написал(а):
Цитата (Russia @ 18.08.2011 - 14:47) |
меня код устраивает, но я хочу писать еще меньше чем здесь, какие приемы можете посоветовать. |
Вот так можно урезать на несколько строчек :)
class news_backend extends cms_app {
public function __construct(){
$this->_run();
}
public function index(){
switch (@$_GET[1]){
case null : {
if (!empty($_POST['id'])){
$this->model->delNews($_POST['id']);
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->news = $this->model->findNewsAll((int)@$_GET[2], 10);
View()->title = 'Новости - список новостей';
View()->interface = 'list';
break;
}
case 'add' : {
if (!empty($_POST['name'])){
$this->model->addNews(
$this->getArrayFromPost(array(
'name', 'text', 'prev_text', 'date', 'keywords', 'description', 'title'
))
);
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->title = 'Новсти - добавить новсть';
View()->interface = 'edit';
break;
}
default : {
if ($idNews = (int)@$_GET[1]){
if ($news = $this->model->findNews($idNews)) {
if (!empty($_POST['name'])){
$this->model->editNews($idNews,
$this->getArrayFromPost(array(
'name', 'text', 'prev_text', 'date', 'keywords', 'description', 'title'
))
);
CMS()->redirect(Sys()->href($_GET[0]));
}
View()->news = $news;
View()->title = 'Новсти - редактировать новсть';
View()->interface = 'edit';
} else {
CMS()->redirect(Sys()->href($_GET[0]));
}
} else {
CMS()->redirect(Sys()->href($_GET[0]));
}
break;
}
}
}
private function getArrayFromPost($keys) {
$r = array();
foreach($keys as $key) {
$r[$key] = isset($_POST[$key]) ? : '';
}
return $r;
}
}
И старайся не использовать собак, если есть возможность (а у тебя есть) - они животные ранимые..
Спустя 1 день, 10 часов, 19 минут, 16 секунд (20.08.2011 - 18:15) Гость_Greg1978 написал(а):
Как нельзя кстати, здесь можно использовать паттерн Command
http://seregaborzov.wordpress.com/2007/10/...ommand-pattern/
http://seregaborzov.wordpress.com/2007/10/...ommand-pattern/
Спустя 3 дня, 5 часов, 38 минут, 42 секунды (23.08.2011 - 23:54) Russia написал(а):
Гость_Greg1978чем мне поможет этот паттерн?
Спустя 17 часов, 20 минут, 11 секунд (24.08.2011 - 17:14) Guest написал(а):
Цитата (Russia @ 23.08.2011 - 20:54) |
Гость_Greg1978чем мне поможет этот паттерн? |
Инкапсулировать командный алгоритм и использовать в контексте ООП парадигмы.