powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
9 сообщений из 9, страница 1 из 1
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169244
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такая:

В БД: есть основная таблица и к ней подчинённая
Модели: есть основной класс и класс подчинённой модели. В основном классе массив экземпляров подчинённой модели (note: подчинённая модель содержить blob поле \картинку\)
Контроллер: выводит передаёт в шаблон экземпляр основного класса.
В браузере via JS: пользователь добавляет новые, изменяет (в т.ч. картинки), удаляет подчинённые объекты и передаёт эту инфу в виде массивов контроллеру на обработку.
Контроллер: обновляет основную модель. Получив массив id из браузера, определяет какие подчиненные записи были добавлены и обновлены и соответственно добавляет или обновляет их в модели, удаляет из модели записи, которых нет в переданном из формы массиве. Вызывает сохранение модели.
Модель: сохраняет данные в основной таблице, для каждой подчинённой модели вызывает метод сохранения в БД. Удаляет из БД те подчинённые записи, которые отсутствуют в модели(пользователь удалил в браузере)

«Немного» запутано. Но так и есть.
Дело усложняется тем, что у основной модели может быть несколько массивов с подчинёнными моделями.
Получается много кода с кучей IF’ов, циклов по массивам и т.д… который трудно поддерживать

Собственно вопрос:
Нельзя это сделать как-нибудь по проще?
Может есть какие-то паттерны проектирования для таких случаев?
поделитесь опытом, плз.
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169383
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jsmirnowwДело усложняется тем, что у основной модели может быть несколько массивов с подчинёнными моделями.
Получается много кода с кучей IF’ов, циклов по массивам и т.д… который трудно поддерживатьНе понятно. Пример кода приведите.
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169451
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jsmirnowwПолучается много кода с кучей IF’ов, циклов по массивам и т.д… который трудно поддерживать

а вот тут надо по ситуации и бизнеслогике смотреть. В "Войне и мир" тоже многабукав
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169651
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основная таблица - спортивный клуб, подчинённая - типы турниров, которые он проводит
Код в контроллере
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
			... тут код обновляющий модель клуба ...

			// Обновим типы турниров ( получим их их $_POST )
			$tt_Ids = Registry::GetParam('tt_Id');
			$tt_Names = Registry::GetParam('tt_Name');
			$tt_DefaultCoefficients = str_replace(',','.',Registry::GetParam('tt_DefaultCoefficient'));
			$tt_Doubleses = Registry::GetParam('tt_Doubles');
			
			
			if (isset($tt_Ids)) // Если получили массив id типов турниров
				foreach ($tt_Ids as $tt_IdKey => $tt_Id ) { // цикл по ним
					
					// Проверяем, что этот тип турнира уже есть в клубе
					$isold = false; 
					if (isset($m_club->ClubTourTypes))
						if (array_key_exists($tt_IdKey,$m_club->ClubTourTypes)) 
							$isold = true;
					
					// Если уже есть, то обновляем его свойства
					if ($isold) {
						//$m_club->ClubTourTypes[$tt_IdKey]->tt_ClubId			= $c_Id;
						$m_club->ClubTourTypes[$tt_IdKey]->tt_Name				= $tt_Names[$tt_IdKey];
						$m_club->ClubTourTypes[$tt_IdKey]->tt_FirstIcon			= null;
						$m_club->ClubTourTypes[$tt_IdKey]->tt_SecondIcon		= null;
						$m_club->ClubTourTypes[$tt_IdKey]->tt_ThirdIcon			= null;
						$m_club->ClubTourTypes[$tt_IdKey]->tt_DefaultCoefficient= (empty($tt_DefaultCoefficients[$tt_IdKey]) ? 0 : $tt_DefaultCoefficients[$tt_IdKey]);
						$m_club->ClubTourTypes[$tt_IdKey]->tt_Doubles			= (isset($tt_Doubleses[$tt_IdKey]) ? 1 : 0 );
					}
					else { // Если это новый тип турнира то создаём его и добавляем в массив типов турниров
						$tt_model = new Model_TourType($this->Registry);
						
						$tt_model->tt_ClubId			= $c_Id;
						$tt_model->tt_Name				= $tt_Names[$tt_IdKey];
						$tt_model->tt_FirstIcon			= null;
						$tt_model->tt_SecondIcon		= null;
						$tt_model->tt_ThirdIcon			= null;
						$tt_model->tt_DefaultCoefficient= (empty($tt_DefaultCoefficients[$tt_IdKey]) ? 0 : $tt_DefaultCoefficients[$tt_IdKey]);
						$tt_model->tt_Doubles			= (isset($tt_Doubleses[$tt_IdKey]) ? 1 : 0 );
						
						$m_club->ClubTourTypes[$tt_IdKey] = $tt_model;
					}
				}
			else
				$m_club->ClubTourTypes = Array();
				
			// Если типа турнир есть в модели, но нет в переданном массиве, то удалим его из клуба
			if (isset($m_club->ClubTourTypes))
				foreach ($m_club->ClubTourTypes as $tt_IdKey => $tt)
					if (!array_key_exists($tt_IdKey,$tt_Ids))
						unset($m_club->ClubTourTypes[$tt_IdKey]);
			
			// Сохраним модель клуба в БД
			$m_club->Save();



Примерно тоже самое в методе Save() клуба. Может чуть проще.


Более опытный товарищ посоветовал смотреть в сторону ORM.
Это действительно поможет убрать дубликат логики из модели.
Посоветуйте, плз, конкретный ORM Framework, а то нашёл их много, сторонники каждого ругают остальные.
Может подскажете как избавиться от этого нагромождения в контроллере?
Может какую-нибудь статью?

Фреймворки типаYii, Symphony, ... не предлагать.
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169695
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор$tt_Ids = Registry::GetParam('tt_Id');

авторФреймворки типаYii, Symphony, ... не предлагать.
чудеса соплестроя
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38169838
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowчудеса соплестроя
Спасибо! Оч. ценный совет.
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38170078
авторНельзя это сделать как-нибудь по проще?
Может есть какие-то паттерны проектирования для таких случаев?
поделитесь опытом, плз.
ты неправильно понимаешь что такое модель и что такое контроллер - от этого вся проблема...

модель - это то что обрабатывает твои данные (раскладывает их на части, переворачивает и тд), а не только сохраняет\достаёт в\из БД
контроллер - "клей" между моделью и представлением

в твоём случае, в контроллере передаёшь данные в модель
твоя_модель->метод_по_обновлению_типов_турниров($_POST);

а в модели !!!, уже крутишь логику по изменению\добавлению\удалению\сохранению данных!!!
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38172946
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так...в твоём случае, в контроллере передаёшь данные в модель
твоя_модель->метод_по_обновлению_типов_турниров($_POST);
а в модели !!!, уже крутишь логику по изменению\добавлению\удалению\сохранению данных!!!
1. Таким образом ты усиливаешь связанность представления и модели.
2. Придётся для каждого способа передачи данных в модель писать свой метод_по_обновлению_типов_турниров(...)
На мой взгляд модель должна реализовывать бизнес-логику и как дополнительная нагрузка - взаимодействие с БД.
А функция "Клея" - передать данные приходящие от представления в модель.
И клеёв будет столько, сколько различающихся представлений.
я не пытаюсь написать ТТУК. Разделение чёткое: модель - бизнес логика, контроллер - преобразование приходящих данных.

или может я не прав? best practice is как то так...твоя_модель->метод_по_обновлению_типов_турниров($_POST);?

Мне коллеги насоветовали использовать orm - как минимум избавлюсь от этой логики сохранения в модели.
почитал про redbeanphp и doctrine. redbeanphp с первого взгляда проще и по отзывам быстрее. из недостатков - работает только с реляционными БД. но в этом проекте у меня mysql, так что не имеет значения.

Посоветуете что-нибудь, пока ничего не написал?
...
Рейтинг: 0 / 0
PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
    #38173294
авторНа мой взгляд модель должна реализовывать бизнес-логику и как дополнительная нагрузка - взаимодействие с БД.
видишь ли в чём дело... ;)

отнесись к модели, как некой абстракции!
например - удалённый сервис, в который ты передаёшь данные и получаешь от него ответ...
тебя не заботит, как там реализован тот или иной метод - есть ли сохранение данных или нету, наличие\отсутствие валидации и т.д. - ты просто что-то отдал и получил своё!!!

теперь представление!!!
естественно, оно должно!!! собирать\отдавать набор именно тех данных, который нужен от\для модели! Иначе написание отдельного приложения неимеет никакого смысла! ;) Можно работать с сервисом (моделью) напрямую без представления и контроллера!!!

контроллер "клей"
- собрал набор данных от представления - передал модели (сервису)
- получил набор данных от модели (сервиса) - передал представлению

автормодель должна реализовывать бизнес-логику
в принципе, ты сам же об этом пишешь, но, при этом, переносишь бизнес-логику в контроллер испытывая при этом ряд затруднений... ;)
авторМне коллеги насоветовали использовать orm - как минимум избавлюсь от этой логики сохранения в модели.
http://en.wikipedia.org/wiki/Object-relational_mapping
- ОРМ (ИМХО) тут вообще никаким боком - это отдельная (не самая важная!!!) часть модели, которой вообще может не быть... ;)

автор2. Придётся для каждого способа передачи данных в модель писать свой метод_по_обновлению_типов_турниров(...)
хм... вот там ты и увидишь насколько уникальны твои отдельные методы и, задумаешься о рефакторинге кода модели!!! со всеми вытекающими!!! ;)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP MVC - Вопрос по реализации MVC для форм с подчинёнными списками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]