Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Представление модели в виде массива (xml, json и т.д.)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
sadsfgasdf
Отправлено: 12 Февраля, 2014 - 17:20:36
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Всем привет.
Пишу проект (MVC + с добавлениями), в котором необходимо реализовать класс, который будет своеобразным API к множеству связанных классов. Сразу приведу пример, чтобы было понятно о чем я говорю:
Класс API отвечает за добавление, изменение, удаление, выборку и т.д. объектов на карте. Все внутренее устройство механизма (бизнес-логика) скрыто за этим API.
Так вот, возник вопрос в каком формате API должен отдавать данные объектов скрытых за API.
1) отдавать сами объекты. Получаем модель, она содержит данные объекта + правила валидации для создания новых объектов этого типа. Все отлично, за исключением того объект вылазит за рамки класса API.
2) отдавать представление объекта в виде массива, xml или json. Представление содержит данные объекта, если объект уже существует или правила валидации, если объект хотим создать.
Далее этот объект отдается в представление, там выстраивается форма для добавление нового объекта -> отдается клиенту. Более интересный на мой взгляд вариант, но тут минус в доп. нагрузке на конвертацию объекта.

Как же быть? Какой вариант предпочтительнее?
 
 Top
sadsfgasdf
Отправлено: 13 Февраля, 2014 - 08:23:17
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Хм.. Неужели никто не сталкивался с подобной проблемой? Может объяснил по-дурацки..
 
 Top
Invert
Отправлено: 13 Февраля, 2014 - 09:28:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




sadsfgasdf пишет:
Как же быть? Какой вариант предпочтительнее?

Да кто же вам скажет, как в этой ситуации будет предпочтительнее? Все зависит от самой ситуации.

Используйте тот вариант, который будет удобнее и проще в реализации. Если ваш API будет возвращать всегда один и тот же формат данных, то удобнее использовать сущности. В этом случае вы всегда будете знать, что именно получаете и вероятность ошибки при работе снизится до нуля.

Я предпочел бы использовать ORM\ActiveRecord вместо API.

PHP:
скопировать код в буфер обмена
  1.  
  2. # Получаем сущность
  3. $someClass = DataObject::get_one( 'SomeClass', $filter );
  4. # Выполняем что-то
  5. # Сохраняем
  6. $someClass->write();
  7.  
  8. # Создаем новую
  9. $someClass = DataObject::create( 'SomeClass' );
  10. # Заполняем данными
  11. $someClass->setData( $data );
  12. # Сохраняем
  13. $someClass->write();
  14.  

(Отредактировано автором: 13 Февраля, 2014 - 09:37:51)

 
 Top
sadsfgasdf
Отправлено: 13 Февраля, 2014 - 09:51:05
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Вот именно, что нужно изолировать внутреннее устройство всего зоопарка классов. ActiveRecord используется внутри, но выпускать его наружу не хочется. Потому что при этом теряем переносимость, возрастает вероятность что кто-либо, кто будет разрабатывать вместе со мной сделает через ActiveRecord то чего не нужно делать.
Напрашивается какой-то паттерн, но какой - фиг знает. Поэтому и прошу совета. Подход вроде как распространенный.
(Добавление)
Да, и насчет формата. Есть несколько типов сущностей, которые необходимо добавлять, удалять, редактировать crud вобщем. Некоторые сущности имеют вложенные сущности.
 
 Top
caballero
Отправлено: 13 Февраля, 2014 - 09:57:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Неужели никто не сталкивался с подобной проблемой

все сталкивались когде еще только начинали програмировать

Цитата:
что при этом теряем переносимость

переносимость куда?

Цитата:
кто будет разрабатывать вместе со мной сделает через ActiveRecord то чего не нужно делать

все ктото может сделать то чего не нужно

Цитата:
Подход вроде как распространенный.

нет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Invert
Отправлено: 13 Февраля, 2014 - 10:07:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




sadsfgasdf пишет:
Вот именно, что нужно изолировать внутреннее устройство всего зоопарка классов. ActiveRecord используется внутри, но выпускать его наружу не хочется. Потому что при этом теряем переносимость, возрастает вероятность что кто-либо, кто будет разрабатывать вместе со мной сделает через ActiveRecord то чего не нужно делать.
Напрашивается какой-то паттерн, но какой - фиг знает. Поэтому и прошу совета. Подход вроде как распространенный.


Вы похоже сами не очень то и понимаете, что должно получиться.

Вам нужна абстракция - сделайте ее. А внести изменения в класс может каждый разработчик, как бы вы не пытались от этого защититься.
 
 Top
sadsfgasdf
Отправлено: 13 Февраля, 2014 - 10:26:21
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Поэтому и прошу совета Улыбка Ок, попробую объяснить с другой стороны. Есть несколько человек, которые пишут программный модуль. Модуль сам в себе, использует свою БД (например mongodb), свои классы и т.д. Модуль работает на CRUD сущностей и реализацию определенной логиики с ними. Есть другие несколько человек, которые пишут другой модуль и т.д. Все модули работают по одному и тому же принципу: у них есть api, через который можно с ними работать. Поверх этих модулей строятся различные приложения со своими контроллерами и представлениями.

(Отредактировано автором: 13 Февраля, 2014 - 10:26:47)

 
 Top
caballero
Отправлено: 13 Февраля, 2014 - 10:32:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну так опиши интерфейс этого API и пусть каждый имплементит его в зависимости что там в модуле


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sadsfgasdf
Отправлено: 13 Февраля, 2014 - 11:14:20
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




caballero пишет:
ну так опиши интерфейс этого API и пусть каждый имплементит его в зависимости что там в модуле

Дэк это итак понятно. Вопрос изначально был в другом. Какой вариант предпочтителен в данном случае и какими проблемами может обернуться в будущем? Может есть другие варианты?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB