У меня есть случай, когда "Скажи, не спрашивай", похоже, противоречит принципу "единой ответственности". Я рассмотрел другие обсуждения по этому вопросу, но пока не смог разработать наиболее подходящий объектно-ориентированный подход для этой ситуации.
У меня есть программа, которая читает и управляет коллекциями данных из разных источников. Я создал класс для хранения и обработки данных (класс "DataSet" ). Он включает в себя методы для выполнения различных операций с наборами данных, такие как сравнение двух наборов данных для генерации нового, который содержит различия, и написание наборов данных в файл.
Теперь я хочу выполнить некоторый анализ в наборе данных и вывести результаты в отчет. Моя первая попытка кодирования этого опроса набора данных для извлечения информации из него, а затем создает отчет, но это, похоже, противоречит принципу "Скажи, не спрашивай". Итак: следует ли поместить методы анализа внутри класса DataSet и сообщить набору данных для анализа самого себя и создания отчета? Разве это нарушает принцип единой ответственности? Что делать, если я хочу выполнять другие типы анализа в будущем - по классу DataSet может сильно раздуваться множеством различных процедур анализа, которые не имеют ничего общего с его основной целью.
Может ли кто-нибудь предложить лучший подход здесь? Существует ли конкретный шаблон проектирования, который решает эту проблему?