Говорить, не спрашивать и единая ответственность — делать новые вещи с данными в классе

У меня есть случай, когда «Говори, не спрашивай», кажется, противоречит «Единой ответственности». принцип. Я просмотрел другие обсуждения на эту тему, но пока не смог разработать наиболее подходящий объектно-ориентированный подход для этой ситуации.

У меня есть программа, которая читает наборы данных из различных источников и обрабатывает их. Я создал класс для хранения данных и управления ими (класс "DataSet"). Он включает в себя методы для выполнения различных операций с наборами данных, таких как сравнение двух наборов данных для создания нового, содержащего различия, и запись наборов данных в файл.

Теперь я хочу выполнить некоторый анализ набора данных и вывести результаты в отчет. Моя первая попытка закодировать это опрашивает набор данных, чтобы извлечь из него информацию, а затем создает отчет, но это, похоже, идет вразрез с принципом «Говори, не спрашивай». Итак: должен ли я поместить методы анализа в класс DataSet и указать набору данных проанализировать себя и сгенерировать отчет? Нарушает ли это принцип единственной ответственности? Что, если я захочу выполнять другие типы анализа в будущем - класс DataSet может стать очень раздутым с множеством различных процедур анализа, которые не имеют ничего общего с его основной целью.

Может ли кто-нибудь предложить наилучший подход? Существует ли конкретный шаблон проектирования, решающий эту проблему?

16
задан Bob 22 May 2012 в 20:34
поделиться