Почему я должен использовать ЭДС? - PullRequest
15 голосов
/ 01 апреля 2011

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

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

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

Ответы [ 4 ]

17 голосов
/ 09 мая 2011

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

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

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

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

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

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

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

13 голосов
/ 02 апреля 2011

Если вас интересует только генерация POJO, тогда я согласен, что есть много альтернатив для достижения того же, что вы можете сделать с EMF.

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

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

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

3 голосов
/ 03 мая 2011

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

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

0 голосов
/ 30 августа 2018

На высоком уровне EMF - это реализация стандарта MOF для модельно-ориентированного проектирования или MDA.Таким образом, используя EMF, вы получаете доступ к сгенерированному коду Java не к объектам Java, а к их модели.Что гораздо больше, чем просто функции Java Reflection.

...