2012-01-26 3 views
0

Я создаю приложение, которое сможет выводить данные в формат RSS, а также более подробный пользовательский формат XML. У меня есть два противоречивых подхода к тому, как я создам иерархию объектов.Подходы к построению иерархии объектов

Вариант 1 - Построить иерархию в соответствии с тем, что требуется каждому формату (RSS/XML)

FeedItem (RSS properties) 
    title 
    description 
    link 
^ 
| 

DetailedFeedItem (Detailed XML properties) 
    expirationDate 
^ 
| 

Article (Detailed XML Article-specific properties) 
    paragraphs 

Хотя это решение работает, он чувствует, как объекты связаны с их визуальными требованиями (RSS/XML).

Вариант 2 - Построить иерархию, основанную на более общей абстракции:

Item 
    title 
    description 
    expirationDate 

^ 
| 

Article 
    paragraphs 

Такой подход представляется более гибкой и простой для меня, но потом, когда я построения RSS, я могу иметь свойства, которые не будут быть заполнен (expirationDate, абзацы). Если я перейду с вариантом 2, я подумывал создать класс, такой как RSSMapper, который возьмет объект и отобразит только необходимые свойства в формат RSS - например, RSSMapper.mapArticle (статья статьи).

Как вы думаете, что было бы лучшим путем?

ответ

1

Вы правы с вариантом 2) (который в основном является Adaptor Pattern).

Ваш объект домена должен быть каким-то образом независим от его использования. Использование класса сопоставления (или адаптера) для преобразования модели в представление является наилучшим способом обеспечения инкапсуляции и разделения ответственности. Таким образом, если вы хотите выставить модель в другом третьем формате (например, HTML?), Вам просто нужно создать соответствующий адаптер, не изменяя какой-либо существующий код.

+0

Спасибо за это. Я поеду с вариантом 2 и включу шаблон адаптера. – jexx2345

Смежные вопросы