«Говори, не спрашивай» для нескольких объектов предметной области

Вопрос

Как мне придерживаться принципа "Говори, не спрашивай"при выполнении функции, включающей несколько

Пример — создание отчета

У меня есть следующие объекты (только в иллюстративных целях):

Автомобиль, Лошадь, Кролик

Между этими объектами нет связи, но я хочу создать Отчет на основе этих объектов:

createHtmlReport(Car car, Horse horse, Rabbit rabbit){
    Report report = new Report()

    report.setSomeField(car.getSerialNumber())
    report.setAnotherField(horse.getNumberOfLegs())
    // ...etc       
}

Проблема с этим методом заключается в том, что он должен «извлекать» данные из каждого объекта, что нарушает правило «Говори, не спрашивай». Я бы предпочел скрыть внутренности каждого объекта , и пусть они сгенерируют для меня отчет:

car.createHtmlReport()   
horse.createHtmlReport()
rabbit.createHtmlReport()

... но затем я получу 3 частичных отчета. XML, JSON ....)

Наконец, при создании отчета я могу включить несколько элементов:

if (car.getWheels() == 4 || horse.getLegs() == 4)
    // do something

7
задан Oded 9 March 2012 в 15:45
поделиться