mus
Новичок
Структура проекта кажется мне избыточной
Предположим я собираюсь сделать проект со следующими пунктами меню
* Покупка
- добавление
- просмотр (тут будет удаление и редактирование)
- статситика
* Продажа
- добавление
- просмотр
- статистика
* Товары
- добавление
- просмотр
- статистика
* Города
- добавление
- просмотр
* Заказчики
- добавление
- просмотр
- статистика
*
Я специально выписал каждый пункт меню. Просто меня тревожит вопрос. Как быть со всей этой иерахией? Она же все время повторяется!
Проблема состоит в том, что на мой взгляд нужно избавлять от этой избыточности в программном коде и каким-то образом избежать повторений.
А именно, демонстрирую пару веток одного тестового проекта, который я недоделал, поэтому на синтаксис можно не обращать внимания, заострая его на семантике приложения
Поглядите, там одни switch casы, посвященные операциям добавления, редактирования, удаления! Это же сущий кошмар! Можно ли избежать этого, применив идею полиморфизма или ещё как-либо сделать код компактнее??
Предположим я собираюсь сделать проект со следующими пунктами меню
* Покупка
- добавление
- просмотр (тут будет удаление и редактирование)
- статситика
* Продажа
- добавление
- просмотр
- статистика
* Товары
- добавление
- просмотр
- статистика
* Города
- добавление
- просмотр
* Заказчики
- добавление
- просмотр
- статистика
*
Я специально выписал каждый пункт меню. Просто меня тревожит вопрос. Как быть со всей этой иерахией? Она же все время повторяется!
Проблема состоит в том, что на мой взгляд нужно избавлять от этой избыточности в программном коде и каким-то образом избежать повторений.
А именно, демонстрирую пару веток одного тестового проекта, который я недоделал, поэтому на синтаксис можно не обращать внимания, заострая его на семантике приложения
PHP:
if(!empty($_GET['mode'])) {
//Выводим категории
$category = $news->getCategory();
$right = "./news/".$_GET['mode'].".tpl";
$smarty->assign("right",$right);
for($i=0;$i<count($category);$i++) {
$obj = new makeLink("category_id",$category[$i]->category_id);
$category[$i]->url = $obj->purl;
}
switch($_GET['mode']) {
case "add":
$operation = "добавление";
break;
case "edit":
$operation = "редактирование";
break;
case "delete":
$operation = "удаление";
break;
}
$smarty->assign("operation",$operation);
$smarty->assign("category",$category);
// По категориям
if(!empty($_GET['category_id'])) {
switch($_GET['mode']) {
case "add":
// Блок для добавления
$newsError = $error->getErrors("news");
if(!empty($_POST['submit'])) {
$news->setMessage($_POST['title'], $_POST['description'], $_POST['message'], time(), $_POST['category_id'], 1, $_FILES['image']);
$smarty->assign("newsError",$newsError);
}
break;
case "edit":
$newsError = $error->getErrors("news");
// Блок для редактирования
if(empty($_GET['message_id'])) {
(empty($_GET['MessagePage'])) ? $MessagePage = 0 : $MessagePage = intval($_GET['MessagePage']);
$message = $news->getNews($_GET['category_id']);
for($i=0;$i<count($message);$i++) {
$obj = new makeLink("message_id",$message[$i]->message_id);
$message[$i]->url = $obj->purl;
}
$page = Tools_PagesList::frame(
$numPageOnFrame,
20,
count($news->getNews(intval($_GET['category_id']))),
null,
false,
"MessagePage"
);
$smarty->assign("page",$page);
$smarty->assign("message",$message);
}
else {
$message = $news->getMessage($_GET['message_id']);
$smarty->assign("message",$message);
if(!empty($_POST['submit'])) {
$news->setMessage($_POST['title'], $_POST['description'], $_POST['message'], time(), $_POST['category_id'], 1, $_FILES['image'], $_GET['message_id']);
$smarty->assign("newsError",$newsError);
}
}
break;
case "delete":
// и т.д.