2012-03-02 3 views
0

Отказ от ответственности .... Я новичок в Java и OOP.Java class design и SAX parser

У меня есть суперкласс с четырьмя подклассами. Для каждого подкласса мне нужно проанализировать XML-файл. Около 40% -50% элементов в каждом XML идентичны друг другу, а другая половина отличается для каждого подкласса.

Мой первоначальный подход состоял в том, чтобы включить код обработчика синтаксического анализатора SAX в суперкласс и просто перечислить в него все возможные элементы XML. Но затем я столкнулся с проблемой передачи других 50% -60% элементов, специфичных для подклассов, обратно в подклассы. Поскольку суперкласс не знает о каждом подклассе (я думаю), я думаю, что я нарушаю принципы ООП, если я каким-то образом перенесу эти данные в подклассы.

Итак, теперь я думаю, мне, возможно, понадобится настроить четыре разных анализатора SAX, по одному в каждом подклассе. Суперкласс все равно будет использоваться для общих переменных экземпляра и других методов. Но у меня также была бы четкость кода SAX-парсера.

Любые советы о том, как действовать дальше и оставаться верными принципам ООП?

+0

Без каких-либо конкретных подробностей мы все просто догадываемся. –

ответ

1

Для этого уровня сложности я бы рекомендовал альтернативный подход к отображению XML на ваш объектный слой. Отметьте JAXB - он обеспечивает очень надежную структуру для такого рода сопоставлений и автоматически обрабатывает наследование объектов.

+0

Я заглянул в JAXB и выяснил, как его запустить и работает (очень много изучил этот процесс). Но поскольку я изучаю Java для окончательной разработки Android, я столкнулся с информацией о том, что JAXB не поддерживается в Android SDK и, вероятно, продолжит другой маршрут. Спасибо за то, что указали мне в этом направлении! – mraviator

0

Как я понимаю, у вас есть (или они DefaultHandlers? Независимо ...), которые разделяют родителя.

Родитель должен иметь возможность поддерживать состояние, разделяемое между четырьмя детьми. В терминах наследования дети могут точно знать, какие методы и свойства имеют их родители. Они, по сути, являются видами их родителями. Им нужно знать, что они унаследовали, поэтому вы должны import A, если вы определяете B extends A. То, что нарушает принципы ООП, - это когда объект имеет ссылку на свой контейнер в отношении агрегации - это наоборот.

Итак, определите общие процедуры обработчика обратного вызова в родительском элементе и переопределите обработчики в дочерних элементах, которые должны обрабатывать дополнительные теги. Просто убедитесь, что вы звоните super(), и подумайте о том, чтобы сделать ваше общее состояние protected.

+0

Вы правы, там будут четыре DefaultHandlers. Поскольку моя цель - использовать этот код с Android SDK, использование JAXB, которое было предложено, - это не-go. Я буду исследовать ваш подход и посмотреть, смогу ли я заставить все работать. Благодарю. – mraviator