[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сокращение ООП кода
Russia
<?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 blink.gif

Спустя 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 написал(а):
классный синтаксис biggrin.gif а вот если еще добавить кейсов штук 5-10 то будет вообще - ховайся laugh.gif

Спустя 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/

Спустя 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чем мне поможет этот паттерн?

Инкапсулировать командный алгоритм и использовать в контексте ООП парадигмы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.