LINUX.ORG.RU

А посоветуйте паттерн

 ,


1

2

В скором времени начну писать приложение, которое будет общаться с внешним устройством по rs-232 по протоколу modbus, хочу расширить поддержку устройств с помощью загрузки кодов функций с сервера. Приложение будет иметь гуй, логгер, отправку данных на сервер в большой мир и другие фичи, которые предложит моя больная фантазия или сообщество.
Какому паттерну проектирования мне следовать? Java.
P.S. Исходники буду распространять под свободной лицензией, поэтому хотелось бы написать так, чтобы не было стыдно за свой код.

★★★★★

Напиши как получиться, посмотри на всё это и перепиши с использованием подходящего шаблона проектирования.

jreznot ()
Ответ на: комментарий от jreznot

В таком случае на разработку у меня уйдет больше года, т.к. время на это не всегда есть + сказывается недостаток опыта — придется много чего гуглить и спрашивать по форумам.

f1xmAn ★★★★★ ()
Ответ на: комментарий от f1xmAn

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

jreznot ()

Напиши минимальный прототип, потом отрефактори к паттернам, которые лучше всего подойдут к написанному коду

annulen ★★★★★ ()

Паттерны — это не серебрянная пуля, они ни в коем разе не отменяют необходимости проектирования ПО. Так что бери листок, ручку, рисуй архитектуру, создавай прототипы.

CrossFire ★★★★★ ()
Последнее исправление: CrossFire (всего исправлений: 1)

Какому паттерну проектирования мне следовать? Java.

в книге Patterns Hatching Влиссидес жаловался на то, что люди воспринимают GoF катастрофически неправильно: вместо примеров решений задач проектирования, на основании которых стоило бы развивать собственное чувство архитектуры ПО (т.е. использования GoF как учебника), их используют в качестве готовых компонентов, универсально решающих некоторые прикладные задачи (т.е. пользуются GoF как справочником)

паттерны не решают задач, они работают в обратную сторону: ты решаешь задачу, и (возможно, но не обязательно) обнаруживаешь своё решение типовым

jtootf ★★★★★ ()

Какому паттерну проектирования мне следовать? Java.

Silver bullet. Судя по вопросу, ты считаешь, что тебе понадобится какой-то один универсальный паттерн.

slackwarrior ★★★★★ ()
Ответ на: комментарий от MyNameIsWinner

паттерны просто вводят терминологию

Deleted ()
Ответ на: комментарий от MyNameIsWinner

Ну так... На форуме чтоб потрепаться с умным видом. Зачем же еще.

slackwarrior ★★★★★ ()
Ответ на: комментарий от jtootf

в книге Patterns Hatching Влиссидес жаловался на то, что люди воспринимают GoF катастрофически неправильно: вместо примеров решений задач проектирования, на основании которых стоило бы развивать собственное чувство архитектуры ПО (т.е. использования GoF как учебника), их используют в качестве готовых компонентов, универсально решающих некоторые прикладные задачи (т.е. пользуются GoF как справочником)

Это товарищ лукавит. GoF по структуре - именно справочник. То, что в этой книге объясняется область применения каждого паттерна, «учебником с примерами» ее не делает.

ovk48 ★★★ ()

command processor и обмен сообщениями между модулями. имхо.

invy ★★★★★ ()

Примени фабрику костылей, так все делают

anonymous ()

В скором времени начну писать приложение, которое будет общаться с внешним устройством по rs-232 по протоколу modbus...

Не повторяй моей ошибки - пиши так, как-будто устройств несколько.

Ну и да - я писал (как это сейчас модно) по паттерну MVC с тем исключением, что

  • на богомерзком C#;
  • дедлайн был вчера;
  • я писал сервер, который писал с БД, так что отображением занимались другие.
ziemin ★★ ()
Ответ на: комментарий от ovk48

Это товарищ лукавит

этот товарищ был одним из авторов книги, если что

jtootf ★★★★★ ()
Ответ на: комментарий от MyNameIsWinner

А зафига они тогда вообще нужны?

а зафига вообще нужно обучение на примерах?

jtootf ★★★★★ ()

Я бы на твоем месте начал бы с более простой задачи — найти адекватную библиотеку для работы с rs-232 + Java. Ту, что можно загуглить нельзя даже с офф сайта Oracle пока стянуть (вроде как тупо забыли ссылку положить, а может уже deprecated).

GreenBag ★★ ()

Вот тебе рецепт: Разбивай систему на модули, не пили все вместе. Каждую часть по TDD. Как только модули будут готовы - создавай API для общения. Рефач. Не стесняйся переписать модули практически с 0 с учетом новых обнаруженных обстоятельств.

anonymous_ ()

Java? Фабрику фабрик фабрик фабрик фабрик уже предлагали?

AlexCones ★★★ ()
Ответ на: комментарий от ziemin

пиши так, как-будто устройств несколько

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

f1xmAn ★★★★★ ()
Последнее исправление: f1xmAn (всего исправлений: 1)
Ответ на: комментарий от anonymous_

Спасибо, так и собирался, но размышлял использовать ли TDD.

f1xmAn ★★★★★ ()

Ты хочешь один паттерн для целого приложения? OMG.

Начни конечно с общеупотребимых - DI, MVC. Для устройства - паттен Gateway. А потом особо не мудри с паттернами - нахлобуч всю логику в контроллерах.

dizza ★★★★★ ()
Ответ на: комментарий от jtootf

этот товарищ был одним из авторов книги, если что

Так я знаю. Вот увидел, какую его детище породило волну быдлокодеров-паттерноидов, и совесть заела, решил отмазаться. Только неумело.

ovk48 ★★★ ()
Ответ на: комментарий от f1xmAn

И не забывай про профилирование. Как это ни странно. Спасёт много нервов. И я имею ввиду не звездюли, а именно уверенность в работе.

Если не секрет - сколько платят?

ziemin ★★ ()
Ответ на: комментарий от ziemin

Нисколько, делаю на энтузиазме для новой лаборатории любимой кафедры, получаю опыт + строчку в резюме. Как писал в ОП, открою исходники, а значит + 100 к ЧСВ. ☺

f1xmAn ★★★★★ ()

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

чтобы в профиле были каналы обмена, протоколы обмена, логика принятия решений.

если такие профили сможешь подгружать-выоружать налету и если их сможет работать несколько впараллель - ты своего добился.

зы. мы такое на плюсах писали, профили были на xml+js/lua. ничетак, работало )

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

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

f1xmAn ★★★★★ ()
Ответ на: комментарий от f1xmAn

С прошивкой имеешь дело? Мне пришлось - будут втирать, что для crc нужны таблицы - шли нахрен - один из алгоритмов быстрого crc: выдаёт гугл

ziemin ★★ ()
Ответ на: комментарий от ziemin

Мне ничего не будут втирать, приложение полностью на моей совести.

f1xmAn ★★★★★ ()
Ответ на: комментарий от f1xmAn

Конечно, обидно, что такое приложение уже есть, но опыт точно не будет лишним.

f1xmAn ★★★★★ ()
Ответ на: комментарий от f1xmAn

Конечно, обидно, что такое приложение уже есть, но опыт точно не будет лишним.

mango m2m уже померло. В смысле последние версии opensource гуглятся, но теперь это называется mango automation. К сожалению хитрые канадцы скупили. В принципе я чувака понимаю. Однако...

ziemin ★★ ()
Ответ на: комментарий от ziemin

Кстати! Лучше халявный проект, чем два велосипеда - напрасно ты рассчитываешь «написать с нуля»

ziemin ★★ ()

По-моему паттерны полезны для тех, кто уже написал много кода, кто продумал не одну программу. Ты ведь студент как и половина ЛОРа? Поэтому предполагаю, что тебе паттерны будут только мешать. Забудь о них. Года на три-четыре.

А вот Гради Буча прочитать не помешало бы. Только так вышло, что его третье издание на русском почему-то хуже второго («новое» не значит «лучше»). Да, на UML тоже молиться не надо. Также будет мешать как и всякие паттерны-шматтерны. Еще поэтому второе издание симпатичнее. Да там и язык более живой. Книга интереснее написана.

Главное - выработать стиль мышления. Еще надо представлять примерный порядок действий при решении сложных задач, но относиться к нему следует критически. Тоже никакого фанатизма быть не должно.

dave ★★★★★ ()
Ответ на: комментарий от dave

Причем надо тоже понимать, что Гради Буч никакой Омерики не открывал. Его методология - это по-сути стандартная схема решения задачи, приложенная к программированию, объектам и классам, плюс некоторая детализация, иногда слишком скрупулезная. Трудно сказать сколько самой схеме десятков, сотен или даже тысяч лет. Но почитать Буча будет полезно.

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 1)

Паттерн Dependency Injection помогает практически в любом нетривиальном проекте.

Поддержка разных устрйств реализуется с помощью ООП-принципа «полиморфизм». Динамическая загрузка кода в Java реализуется с помощью ClassLoader-ов. Скорее всего будет уместен паттерн «Фабрика» для поиска и создания конкретной реализации протокола.

Для GUI обычно используют Swing, впрочем есть и другие варианты. Для логгирования мне нравится библиотека logback.

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 1)

Just remember it

Не паттерны делают проект, а проект делает паттерны.

d_Artagnan ★★ ()
Ответ на: комментарий от Legioner

Паттерн Dependency Injection помогает практически в любом нетривиальном проекте.

И фасад, и адаптер, и стратегия, и шаблонный метод тоже помогают практически в любом нетривиальном проекте.

Уже пять штук на ровном месте.

d_Artagnan ★★ ()
Ответ на: комментарий от AlexCones

Кстати это ведь что-то вроде ОО каррирования?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.