Design Patterns for Java

Jun 24, 2007 11:32

Предположим, был у меня простой сайт с набором бинов, которые делают что-то полезное.

Дальше куча всякой технической белиберды про Java )

tech, question

Leave a comment

Comments 4

ozzykk August 3 2007, 03:16:45 UTC
Стас, а если попробывать пойти по несколько другому пути.
Логика зависит от имени домена. Создаешь интерфейс, который описывает логику.
Если есть общая логика, то вдобавок - абстрактный класс, реализующий эту общую логику. Затем создаешь конкретные классы под каждое конкретное поведение и заносишь их в Map: login.put("somedomain", new Logic1()). И далее, в зависимости от домена либо interceptor'ами, либо какими-либо другими механизмами меняешь поведение.
Вообще вариантов достаточно много можно придумать. Можно еще попробывать добавить в контроллер класс на подобие:
public class Logic implements ....{
public void apply(SomeArg arg1) {} // interface method
private logic1() {}
private logic2() {}
}

И здесь уже все от фантазии зависит. Либо в одном классе реализовывать различную логику, либо разбросать по классам, а методом apply только делегировать в зависимости от определенного условия.
В общем, примерно так.

Reply

standev August 3 2007, 04:01:56 UTC
Так... а теперь если учесть, что бин Logic - один, а requestов - много, надо как-то предотвратить межтредовые конфликты.

login.put("somedomain", new Logic1());
(смысл этой строчки от меня ускользает, но в любом случае межтредовые конфликты здесь будут).

В результате надо этот Map хранить в ThreadLocal, чтобы разруливать конфликты. В результате получаем несколько навороченный способ номер 2.

Reply

ozzykk August 3 2007, 04:12:11 UTC
Упрощенно это выглядит так:
public class SomeController implements Controller {

private Map logicSet;

public ModelAndView(HttpServlet request, ....)
Logic logic = logicSet.get(request.getServerName());
logic.execute();
return new ModelAndView(...);
}

public void setLogicSet(Map logicSet) { this.logicSet = logicSet; }
}

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

Reply


avrelij176 September 17 2007, 02:55:07 UTC
вам надо войти в команду разработчика Semagic'а - полезная прога, но к сожалению не всемогущая(думаю иногда, ее спецом не развивают, чтоб рекламный трафик жж не сокращать...)

Reply


Leave a comment

Up