Как правильно реализовать парсер следуя принципу Single responsibility?
Есть парсер, который парсит, к примеру, котят, собачат, автомобили, здания и инопланетян.
Этот класс занимается тем, что на вход получает кучку байт, а на выходе структуру данных.
Правильно-ли я понимаю, что у этого класса 5 причин для изменения? Ведь в разное время жизни может поменяться формат, этих самых, котят и собак с инопланетянами. А может и вообще не байтами приходить, а строками Json или Xml (Но тут очевидно, что строки можно просто в массив байт перевести).
Как правильно интерпретировать этот принцип?
Ну, все верно. Если у вас один класс пытается парсить и HTML и JSON, то явно его нужно как минимум на 2 класса разделить. Можно, например, общий метод выделить Parse. Создать некий IParser интерфейс и его реализовать в этих 2 классах.
Тут имеется в виду не это. Имеется ввиду, что класс умеет парсить разные вещи, какого-то одного формата. Видимо просто запутано написано. Смысл вопроса в том, является ли множество методов парсинга разных структур запиленых в одном классе нарушением принципа.
pozitiffcaat: Конечно является нарушением. Он и html парсит (1 отв.) и json парсит (2 отв.). Нужно добавить поддержку нового тега в html, мы будем править этот класс. Но, этот класс ещё и json парсит, а значит нужно после правок протестировать работу html и json. Очевидное нарушение принципа.