Почему я должен использовать EMF?

Я читал несколько учебники о EMF, и я все еще удивляюсь, почему я должен его использовать.

До сих пор я генерировал свои POJO из схемы XSD + JXC или вручную.

Насколько я понимаю EMF, может быть полезно определить некоторые сложные отношения между классами (один-ко-многим и т.д.). Но это все? Не сложнее ли генерировать код с помощью EMF? Не добавляет ли он лишних зависимостей?

Ответы

Ответ 1

ЕСЛИ ваш интерес представляет только генерация POJO, тогда я согласен, что есть много альтернатив, чтобы достичь того же, что вы можете сделать с EMF.

Однако генерация Java была всего лишь первым применением EMF. Теперь существует огромное количество подключаемых модулей Eclipse на основе EMF, которые дают вам бесплатно множество функций для манипулирования (запроса, проверки, преобразования,...) ваших моделей EMF.

См. Проект моделирования Eclipse для списка официальных проектов Eclipse в EMF.

Кроме того, взгляните на Acceleo, чтобы увидеть гибкость своего подхода к генерации на основе шаблонов из моделей EMF (для Java, PHP,...).

Ответ 2

В общих терминах можно сказать, что использование emf дает несколько преимуществ во время выполнения.

На первом этапе вы заметите, что классы ecore (и среда выполнения emf) предлагают то, что вам может понадобиться, из ваших POJO в вашем приложении. Нет необходимости в кодировании во многих областях, тогда как при использовании простых POJO вам потребуется много кода:

  • Вы получаете полномасштабную систему уведомлений (без кодировки PropertyChange). Он даже предлагает уведомления об изменениях, которые происходят дальше в вашем экземпляре-дереве (приложить прослушиватель к x, получать уведомления об изменениях в y, на которые ссылается x). Значения
  • являются неустановимыми (на самом деле очень распространенная потребность: вам нужно знать о трех состояниях значения: оно установлено, оно равно null или оно не было затронуто).
  • двунаправленные ссылки: X-ссылки Y и наоборот. Удалите ссылку на Y в X, также удаляется противоположная ссылка.
  • Поддержка XML, XMI (и т.д.) сериализации поддерживает готовые версии.
  • ленивая загрузка: вы можете разделить свою модель и загружать определенные части только лениво.
  • и др.

Расширения для EMF даже предлагают гораздо больше:

  • Запрос EMF или путь EMF добавляют расширенные возможности запроса для сбора экземпляров pojo для заданных критериев
  • CDO позволяет вам кодировать 3-уровневые приложения без дальнейшего ручного кодирования. CDO добавляет постоянную базу данных и удаленное уведомление (сеансы, транзакции, управление версиями, ветвление и т.д.).
  • Xtext добавляет сериализацию к пользовательским DSL (определите собственный формат/диалект сериализации)
  • и др.

На самом деле вы можете утверждать, что EMF/Ecore предлагает стандарт для POJO, и вокруг него растет вся экосистема, которая фактически предлагает то, что вы бы кодировали вручную классическим подходом.

Если честно, недостатком EMF является то, что вы привязаны к среде выполнения Ecore, что очень хорошо, если вы кодируете богатые клиенты на основе Eclipse, но можете стать проблемой, если вы находитесь на сервере.

Ответ 3

Добавление к тому, что Jordi сказал, что EMF предоставляет механизм уведомления, который, в отличие от XML Beans, например, позволяет добавлять слушателей к изменениям модели. Поэтому, когда изменения происходят в модели, вы получаете уведомление об этом изменении.

Я успешно использовал запрос EMF для поиска модели с использованием синтаксиса типа SQL и использования OCL. EMF Validation - отличная основа для проверки вашей модели на основе того, что определено в схеме, а также введения вашей собственной логики проверки, если она не может быть выражена в схеме.