2010-02-19 1 views
5

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

Поэтому у меня есть класс, скажем ProductImporter, и он несет ответственность за импорт продуктов. Этот класс большой, вероятно, слишком большой.

Методы в этом классе являются сложными и будут, например, getDescription. Этот метод не просто захватывает описание из другой системы, но устанавливает описание продукта на основе различных настроек, заданных пользователем. Если бы я добавил параметр и новый способ получить описание, этот класс мог бы измениться.

Итак, это две обязанности? Есть ли тот, который импортирует продукты, и тот, который получает описание. Казалось бы, почти каждый метод, который у меня есть, будет в его собственном классе, и это кажется излишним.

Мне действительно нужно хорошее описание этого принципа, потому что мне трудно полностью понять. Я не хочу ненужной сложности.

ответ

3

«Ответственность» определяется в этом принципе как причина для изменения. В этом случае единственной ответственностью вашего класса будет импорт продуктов. Если способ импорта продукта изменяется, класс должен измениться.

Цель состоит в том, чтобы избежать одновременного изменения одного и того же класса. Например, если класс импортера продукта также определил его выходной формат, он будет иметь две обязанности, так как, скорее всего, выходной формат полностью не связан с механизмом импорта данных.

Теперь, когда класс огромен и что getDescription() также устанавливает описание, это не является прямым нарушением SRP, а имеет разные принципы. А именно, что вам следует избегать наличия огромных классов (показывает отсутствие дизайна), и каждый метод должен делать одну вещь (которая была бы скорее более конкретной версией SRP.)

+0

Это «показывает недостаток дизайна», - Это проблема, что я не уверен, как исправить. Если метод описания принадлежит классу, и я должен учитывать каждое изменение в зависимости от различных параметров, как еще вы можете его создать. Я не вижу другого пути. – user204588

+0

У вас может быть класс описания, ответственностью которого будет обработка вариации. И так далее, когда одна ответственность слишком велика, разделите ее на меньшие обязанности. –