В общих чертах можно сказать, что использование 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, но может стать проблемой, если вы находитесь на сервере.