У меня есть трехуровневая настройка сервера web-app-database. Веб запрашивает данные из приложения, и приложение получает свои данные из базы данных, затем обрабатывает и возвращает их в Интернет для отображения. Стандарт.
В настоящее время все данные, которые я сериализирую от приложения к сети, помещаются в пользовательские структуры данных, которые веб-сторона затем анализирует для отображения. Другими словами, скажем, у меня есть заказ, который я хочу получить и отправить в Интернет. Я не сериализую весь объект, а скорее создаю массив с соответствующими элементами данных на сервере приложений, затем сериализую этот массив на веб-серверы.
Теперь я изучаю сериализацию всего объекта заказа на веб-сервере.
Какой метод, который вы, ребята, нашли, лучше всего сериализовать при сохранении разделения кода сервера приложений и веб-сервера? Я не хочу, чтобы у моих веб-серверов был какой-либо код, который обращается к БД, но я хочу, чтобы они максимально использовали классы, которые инкапсулируют мой заказ и другие данные.
Чтобы еще больше уточнить мой вопрос (благодаря ответу Гленна), я не хочу, чтобы у моих веб-серверов была какая-либо бизнес-логика, скажем, также класс заказов, который должен знать только сервер приложений. Объекты уже используют отдельную сериализацию в / из базы данных и в / из веб-серверов.
Используя пример заказа на сервере приложений, заказ должен быть в состоянии отменить: т.е.
$ заказа запасного> отменить ();
но на веб-сервере этот метод даже не должен быть найден. Он не должен просто возвращать (напрямую) прокси к методу отмены заказа на сервере приложений, потому что запросы действий пользователя должны проходить через слой авторизации и проверки полномочий приложения.
Итак, как мне получить объект заказа на моем веб-сервере, который имеет некоторые (но не все) методы и свойства объекта на моем сервере приложений, практически без дублирования кода. Я думал о том, чтобы создать базовый класс с ограниченным набором свойств и методов. Он будет использовать внутренний класс для хранения своих свойств, и мне потребуется весь доступ к данным для передачи и извлечения из методов получения и установки. Они, в свою очередь, вызовут методы получения и установки внутреннего класса.
Веб-серверы и серверы приложений могут независимо расширять базовый класс и использовать собственный внутренний класс для хранения свойств. Тогда, например, на стороне приложения внутренний класс может быть расширением класса ORM, который может сохранять данные в БД, а на веб-стороне внутренний класс может быть простым классом-держателем свойств.
Но весь внутренний класс кажется немного неуклюжим, поэтому я все еще ищу лучшие решения.