В чем разница между ориентированными на данные и объектно-ориентированными моделями приложений?

Что такое ориентированное на данные приложение и существует ли какая-либо разница с объектно-ориентированной моделью приложения?

Ответ 1

Оба понятия несколько ортогональны, Data Centric Application - это тот, где база данных играет ключевую роль, когда свойства в базе данных могут влиять на пути кода, запущенные в ваше приложение и где код более общий, и вся/основная бизнес-логика определяется через отношения и ограничения базы данных. ООП можно использовать для создания приложения, ориентированного на данные.

Некоторые крупные архитектуры многоуровневые, о которых люди думают, когда говорят, что архитектура ООП реализует бизнес-логику в коде и просто хранит данные в базе данных. Однако было бы неправильно думать, что объектно-ориентированный дизайн обязательно должен быть большой системой бизнес-логики.

Предположим, вам нужно выполнить передачу сообщений между двумя системами. Один из способов (хотя и плохой) состоит в том, чтобы каждая из систем записывала сообщения в базу данных, а другая система читала из базы данных так часто, чтобы получать сообщения. Это будет подход, ориентированный на данные, поскольку требуется очень мало кода, кроме чтения и записи данных.

Такую же систему можно реализовать, если системы открывают соединение сокета друг с другом и отправляют сообщения напрямую. Таким образом, существует больше кода и меньше доступа к базе данных. Это нецентральный подход. Любой из них может быть реализован с использованием концепций ООП.

Еще один пример моей работы: мы реализуем серверы для игр, один тип сервера обрабатывает многопользовательскую игру, поэтому пользователь нажимает кнопку, а космический корабль запускает ракету у другого игрока. Этот сервер не является центром данных, основанным на событиях. Другой сервер хранит списки пользователей, списки друзей и т.д. Этот сервер является тонкой оболочкой по базе данных, в которой хранятся счет и списки.

Ответ 2

Дизайн, ориентированный на данные, является тем, где поведение приложения инкапсулируется данными. Простой пример. Рассмотрим следующий класс ООП:

class Car {
    void move(x, y);
private:
    int x, y;
}

Это представление ООП автомобиля. Вызов метода "move" заставит автомобиль начать движение. Другими словами, любые побочные эффекты запускаются путем вызова методов класса.

Здесь один и тот же класс, но ориентированный на данные:

class Car {
   int x, y;
}

Чтобы заставить этот автомобиль двигаться, я бы "просто" изменил значения x и y. В большинстве языков программирования изменение членов не позволит выполнять логику, поэтому для центрирования данных часто требуется фреймворк.

В такой структуре логика выполняется на C, U и D CRUD. Такая структура предоставит соответствующие средства для включения ввода кода в любом из этих событий, например:

  • Триггеры СУБД
  • OMG DDS waitsets/listeners (DDS - стандарт передачи данных, ориентированный на данные)
  • наблюдатели corto (corto - это инфраструктура приложений, ориентированных на данные)

Дизайн, ориентированный на данные, имеет много последствий. Например, поскольку состояние приложения эффективно представлено его данными, вы можете автоматически сохранить приложение. Хорошо написанное приложение, ориентированное на данные, может быть сохранено, остановлено и восстановлено из базы данных и продолжено, как никогда не было.

Проекты, ориентированные на данные, хорошо подходят для традиционных трехуровневых веб-архитектур. Веб-приложения обычно управляются содержимым базы данных. Вот почему, когда вы закрываете и открываете динамическую веб-страницу, она по-прежнему выглядит одинаково (при условии, что данные не меняются).