К вопросу о моделях и парсерах -
single responsibility же =) Модель делает свою, только одну работу, парсер делает свою и тоже только одну работу. Парсер может создавать модель, может принимать готовую и наполнять ее данными, но точно не сама модель должна заниматься парсингом данных.
Другой вопрос что при изменении формата передаваемых данных, нам все равно приходится рефакторить и модель, и парсер. Но это нормально, это не нарушает SOLID