Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > Design


Автор: sergioK1 4.2.2011, 10:27
The Application:
Код


You are responsible for developing an application that will be able to process multiple types of items. This application listens to a message queue, from which it receives items of various types. For instance, it may receive a message containing a balloon, which it will have to pop, followed by a message containing an image, which it will have to display, followed by another message containing a mail descriptor, which it will have to send.
The message queue from which you retrieve the messages has the following method, which you can use:

    public static Object nextMessage();

This method returns null in case no message is currently available, or an object typed for the specific message (e.g. Balloon, Image, or MailDescriptor).

Requirements & assumptions:
    The messages that you receive may come from external systems, so you have no control over their classes.
    This application should be as scalable and extensible as possible. Keep in mind that many other types of messages that should be processed by this application will be added as time goes by.
    Try to make this application efficient, in terms of memory and performance.



Помоему тут обычный factory только куда тут static прикрутить ? У кого какие мысли будут ?


Автор: COVD 4.2.2011, 17:35
static тут ни при чем. Для упрощения формулировки задачи, наверное. 
Важно, что метод nextMessage() неблокирующий, так как возвращает null. Поэтому нужен таймер, который периодически опрашивает очередь. Далее, некоторые задачи, связанные с ГУИ (baloon,image)  надо выполнять в EventDispatchThread. Другие (емайл) надо выполнять в отдельном потоке, потому что это сетевая операция с непредсказуемым временем выполнения. Для таких задач нужен пул потоков. Наконец, нужен Мап (это и будет очевидно Фактори), где каждому имени класса мессаджа будет указано имя класса обработчика. Эти пары могут быть прописаны в свойствах приложения. Чтобы добавить обработку нового сообшения, надо перестартовать приложение. А чтобы это делать "налету", надо приложение строить на плагинной архитектуре. Типа OSGi.   

Автор: sergioK1 4.2.2011, 22:48
Цитата(COVD @ 4.2.2011,  17:35)
static тут ни при чем. Для упрощения формулировки задачи, наверное. 
Важно, что метод nextMessage() неблокирующий, так как возвращает null. Поэтому нужен таймер, который периодически опрашивает очередь. Далее, некоторые задачи, связанные с ГУИ (baloon,image)  надо выполнять в EventDispatchThread. Другие (емайл) надо выполнять в отдельном потоке, потому что это сетевая операция с непредсказуемым временем выполнения. Для таких задач нужен пул потоков. Наконец, нужен Мап (это и будет очевидно Фактори), где каждому имени класса мессаджа будет указано имя класса обработчика. Эти пары могут быть прописаны в свойствах приложения. Чтобы добавить обработку нового сообшения, надо перестартовать приложение. А чтобы это делать "налету", надо приложение строить на плагинной архитектуре. Типа OSGi.

Не тут пока не идет речь конретно о жаве, пока это только дизайн может писать будеа на С++, может на жава , может не Я решаю .

что значит что метод nextMessage() неблокирующий? совсем понял.
пока смотрю в сторону  has a , то есть Я создаю прокси обьест скажем баллон а нем ссылка на баллон из внешней системы, и абстактный метод recieve , т,е изменили мне интерфейс этого внешнего баллона Я меняю реализацию баллона или другого конкретного обьеста,

советуют применить Visitor (http://en.wikipedia.org/wiki/Visitor_pattern)  вроде бы экономит память, или не очень?
но на первый взгляд  напоминает cтарый TDD, или взгляд у меня косой ? smile 

В общем что лучше и когда прокси или декоратор? 









Автор: COVD 5.2.2011, 00:46
Цитата

что значит что метод nextMessage() неблокирующий? совсем понял.

Пример блокирующего метода - в сокетах accept() (в блокирующем режиме) - если нечего возвращать, то не возвращает, т.е. блокирует вызывающий поток.

Автор: _sten_ 5.2.2011, 13:12
попахивает тестовым заданием при поиске работы.

Цитата

пока смотрю в сторону  has a , то есть Я создаю прокси обьест скажем баллон а нем ссылка на баллон из внешней системы, и абстактный метод recieve , т,е изменили мне интерфейс этого внешнего баллона Я меняю реализацию баллона или другого конкретного обьеста,

советуют применить Visitor (http://en.wikipedia.org/wiki/Visitor_pattern)  вроде бы экономит память, или не очень?
но на первый взгляд  напоминает cтарый TDD, или взгляд у меня косой ? smile 

В общем что лучше и когда прокси или декоратор? 

мало что понятно.... но по моему ты смотришь не в ту сторону

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

Автор: sergioK1 5.2.2011, 20:55
Цитата(_sten_ @ 5.2.2011,  13:12)
попахивает тестовым заданием при поиске работы.

Цитата

пока смотрю в сторону  has a , то есть Я создаю прокси обьест скажем баллон а нем ссылка на баллон из внешней системы, и абстактный метод recieve , т,е изменили мне интерфейс этого внешнего баллона Я меняю реализацию баллона или другого конкретного обьеста,

советуют применить Visitor (http://en.wikipedia.org/wiki/Visitor_pattern)  вроде бы экономит память, или не очень?
но на первый взгляд  напоминает cтарый TDD, или взгляд у меня косой ? smile 

В общем что лучше и когда прокси или декоратор? 

мало что понятно.... но по моему ты смотришь не в ту сторону

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



Видимо про дезайн и UML тут не слышали  smile , переформулием вопрос proxy vs visitor . что лучше и когда?
То что написал CОVD, напоминает Java докуметацию, очень лаконично но что с этим делать не понятно ,  вернее понятно 
тем кто с этим лет 5 работает ,ну и примеров море smile 
Напоминает это ответ заказчику,  знающему технологию на уровне bazzords, что-бы тот думал что тут ребята крутые   smile  
(Сам такие трюки люблю)

А что у вас в фирме дает такие задачи  при приеме на работу ? И в чем смысл ? 

Автор: COVD 5.2.2011, 23:31
Цитата

То что написал CОVD, напоминает Java докуметацию, очень лаконично но что с этим делать не понятно ,  вернее понятно 
тем кто с этим лет 5 работает ,ну и примеров море  
Напоминает это ответ заказчику,  знающему технологию на уровне bazzords, что-бы тот думал что тут ребята крутые     
(Сам такие трюки люблю)

Должен быть диалог, а не монолог. Вы переспросили про "неблокирующий" - я пояснил. Нет смысла расписывать подробности наперед. Потому что, бывает, задают вопрос и исчезают. Или вопрос неправильно понят или сформулирован. Вот чего бы я распинался, когда вас оказывается на самом деле интересует "proxy vs visitor".  Тут я ничего сказать не могу. 

Автор: sergioK1 6.2.2011, 00:05
[QUOTE=COVD,5.2.2011,  23:31]
Цитата

Должен быть диалог, а не монолог. Вы переспросили про "неблокирующий" - я пояснил. Нет смысла расписывать подробности наперед. Потому что, бывает, задают вопрос и исчезают. Или вопрос неправильно понят или сформулирован. Вот чего бы я распинался, когда вас оказывается на самом деле интересует "proxy vs visitor".  Тут я ничего сказать не могу.


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

С патернами вроде понятно ,  если пару дней никто не выскажется - можно закрывать тему ,

Но все равно спасибо , в любом случае собирался заняться сокетами,

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)