Как разделить функции приложения между классами служб и классами утилит? - PullRequest
0 голосов
/ 14 марта 2012

Мы использовали Spring Framework и столкнулись с такой ситуацией:

У нас есть классы обслуживания, например, CatalogManager, CourseManager, теперь мы хотим, чтобы у них были такие функции, как, например, parseXML.

Мой вопрос заключается в том, должен ли я поместить эти методы в каждый отдельный класс, например, в метод parseXML в CatalogManager или CourseManager?Или мы должны создать класс XMLUtil и создать методы, такие как parseCatalogXMl и parseCourseXML, в этом классе?

Спасибо.

1 Ответ

1 голос
/ 14 марта 2012

Это зависит от того, что будет делать parseXML().

Случай 1: Если все методы parseXML() собираются сделать то же самое, тогда у вас должен быть другойкласс, который имеет один parseXML() метод.Зачем?Это позволяет избежать ненужного повторения, упрощает обновление и легко расширяется.

Случай 2: Если все методы parseXML() будут отличаться (в основном, не только нескольколинии), было бы проще реализовать метод в каждом классе.Зачем?Попытка объединить много разных методов в один сложна и уродлива.

Случай 3: Создать суперкласс из CatalogManager и CourseManager, который имеет метод parseXML().Затем, если подкласс должен сделать что-то другое с помощью этого метода, он может просто переопределить его.

Какой из них следует использовать? Окончательное решение является наиболее предпочтительным, поскольку оно сохраняет ваш кодпростой, расширяемый, читаемый и обновляемый, объединяющий лучшее из первых двух подходов.Но если строго применяется один из первых двух случаев, то вместо этого следует использовать их.

Ваша структура класса будет такой:

Manager          // the super class, this implements parseXML().
  CatalogManager // a sub class, overriding parseXML() only if it needs to.
  CourseManager  // same as above.
XMLUtil          // this class is only necessary in case 1.

Это ваше решение в конце.Ни один случай не будет быстрее, чем любой другой, просто выберите тот, который вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...