2009-10-01 4 views
4

Когда я хочу применить принцип DRY, то есть унифицировать код действия нескольких Struts для разных прецедентов (например, роль администратора и роль оператора), один из вариантов должен был бы использовать абстрактный базовый класс «BaseAction» для действия, а затем использовать «AdminAction extends BaseAction» и «OperatorAction extends BaseAction». Я бы применил наследование для абстрактных NewBaseAction, UpdateBaseAction, DeleteBaseAction, ListBaseAction.Действия Struts и состав над наследованием

Но есть принцип, который гласит: «Оплатить пользу над наследованием» (http://www.artima.com/lejava/articles/designprinciples4.html). Есть ли способ реализовать это чистым способом с помощью интерфейсов?

ответ

2

Заявление «Особняк композиции над наследованием» - это ключ к лучшему дизайну в целом. Рамки, такие как Struts, представляют собственную модель программирования. Поэтому вы должны написать действие Struts таким образом, чтобы они придерживались лучших методов Struts.

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

Найдите варианты использования «Struts way» DRY. Больше Распорки лучшие практики вы найдете в свободной книге Struts Survival Guide

+0

Благодарим вас за ссылку на бесплатную книгу расположений – poseid

0

В качестве примечания:

Считает, что «новая» и «обновление», часто очень, очень подобные операции, и часто может быть таким же действием, например, с одним оператором case, вместо двух разных классов, поддерживающих два разных JSP.

2

«Возносить композиции над наследованием» решение было бы либо:

  1. двигаться общий код в отдельный, не- Action класса, используемого всеми Action с в вопросе, или
  2. Переместив разные код в отдельный, не Action класс, а также один Action, который может использовать любое из этих поведений.

Прошло несколько лет с тех пор я сделал Struts, но я думаю, что для (2) вам потребуется немного хитрости в struts-config.xml, конфигурации нескольких <action> сек того же Action класса, с различными параметрами, и с Action может загрузить или выбрать другую реализацию поведения в зависимости от параметров. Это кажется немного не-Strutsy, так как требуется часть логики управления, которая обычно находится прямо в struts-config.xml и скрывает ее в коде.

Но в зависимости от вашей культуры развития, которая действительно может считаться хорошей вещью.

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

Последнее приложение Struts, в котором я был, мы использовали наследование. Возможно, это была правильная вещь, возможно, мы просто не знали ничего лучшего.