Что некоторая польза раскрывающиеся диалоговые окна для Ruby on Rails

В этой статье Java World хорошо объясняется

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

Не редкость, что у меня будет класс, реализующий 1 или более интерфейсов.

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

выдержка из вышеупомянутой статьи JavaWorld.com, автор Tony Sintes, 04/20/01


Интерфейс против абстрактного класса

Выбор интерфейсов и абстрактных классов не является ни / или предложением. Если вам нужно изменить свой дизайн, сделайте его интерфейсом. Однако у вас могут быть абстрактные классы, которые обеспечивают некоторое поведение по умолчанию. Абстрактные классы - превосходные кандидаты внутри фреймворков приложений.

Абстрактные классы позволяют вам определить некоторые виды поведения; они заставляют ваши подклассы предоставлять другие. Например, если у вас есть инфраструктура приложения, абстрактный класс может предоставлять сервисы по умолчанию, такие как обработка событий и сообщений. Эти службы позволяют вашему приложению подключаться к инфраструктуре приложения. Однако есть некоторые функциональные возможности приложения, которые могут выполнять только ваше приложение. Такие функции могут включать задачи запуска и завершения работы, которые часто зависят от приложения. Поэтому вместо того, чтобы пытаться определить это поведение, абстрактный базовый класс может объявлять абстрактные методы остановки и запуска. Базовый класс знает, что ему нужны эти методы, но абстрактный класс позволяет вашему классу признать, что он не знает, как выполнять эти действия; он знает только, что он должен инициировать действия. Когда пришло время запуска, абстрактный класс может вызвать метод запуска. Когда базовый класс вызывает этот метод, Java вызывает метод, определенный дочерним классом.

Многие разработчики забывают, что класс, который определяет абстрактный метод, также может вызвать этот метод. Абстрактные классы - отличный способ создания запланированных иерархий наследования. Они также являются хорошим выбором для классов nonleaf в иерархиях классов.

Класс против интерфейса

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

Например, шаблон стратегии позволяет вам заменять новые алгоритмы и процессы в вашу программу, не изменяя используемые им объекты. Медиаплеер может знать, как воспроизводить компакт-диски, MP3-файлы и wav-файлы. Конечно, вы не хотите жестко кодировать эти алгоритмы воспроизведения в плеер; что затруднит добавление нового формата, такого как AVI. Кроме того, ваш код будет завален бесполезными заявлениями о случаях. И чтобы добавить оскорбление к травме, вам нужно будет обновлять эти заявления о случаях каждый раз, когда вы добавляете новый алгоритм. В общем, это не очень объектно-ориентированный способ программирования.

С шаблоном Strategy вы можете просто инкапсулировать алгоритм, стоящий за объектом. Если вы это сделаете, вы можете предоставить новые плагины для мультимедиа в любое время. Назовем класс плагина MediaStrategy. У этого объекта будет один метод: playStream (Stream s). Поэтому, чтобы добавить новый алгоритм, мы просто расширяем наш класс алгоритмов. Теперь, когда программа встречает новый тип носителя, он просто делегирует воспроизведение потока в нашу медиа-стратегию. Конечно, вам понадобится сантехника, чтобы правильно создать алгоритмы, которые вам понадобятся.

Это отличное место для использования интерфейса. Мы использовали шаблон стратегии, в котором четко указано место в дизайне, которое изменится. Таким образом, вы должны определить стратегию как интерфейс. Обычно вы должны поддерживать интерфейсы над наследованием, если хотите, чтобы объект имел определенный тип; в этом случае MediaStrategy. Опираясь на наследование для идентификации типа опасно; он блокирует вас в определенной иерархии наследования. Java не разрешает множественное наследование, поэтому вы не можете расширять то, что дает вам полезную реализацию или больше идентификатора типа.

blockquote>

13
задан Tilendor 1 July 2009 в 23:59
поделиться

8 ответов

Существует также опытное окно .

4
ответ дан 2 December 2019 в 00:19
поделиться

Я никогда не использовал его сам (еще, по крайней мере), но Вы попробовали RedBox?

3
ответ дан 2 December 2019 в 00:19
поделиться

Я исследую ModalBox в данный момент, и это выглядит многообещающим.

Существует плагин Google Group и Rails, который заменяет основное, подтверждают всплывающее окно с модальным диалоговым окном.

2
ответ дан 2 December 2019 в 00:19
поделиться

Я использовал Лайтбокс, Взбешенный некоторое время теперь, хотя я изменил его для отображения DIV или другого элемента, это уже находится на странице (хотя скрытый), и затем возвратите его, он - родитель, когда поле закрывается. Я использовал его, делают, делают Мастера, которые направляют пользователя посредством процесса.

1
ответ дан 2 December 2019 в 00:19
поделиться

Попробуйте TopUp ]! Он разработан в приложении Rails, и вы можете получить его на GitHub . Обратите внимание, что это все еще бета. Отзывы всегда приветствуются;)

2
ответ дан 2 December 2019 в 00:19
поделиться

Facebox , jquery, который Github использует лучше всего. Также существует версия прототипа .

2
ответ дан 2 December 2019 в 00:19
поделиться

Я использовал facebox_render для всех моих проектов рельсов. Он действительно прост в использовании и является полноценным помощником. Вы можете легко отобразить HTML или JavaScript в своем контроллере RESTful.

1
ответ дан 2 December 2019 в 00:19
поделиться

Я пробовал несколько из них, упомянутых выше, но немного покрутив его, я обнаружил, что http://www.methods.co.nz/popup/popup.html работает лучше для меня, единственная проблема заключается в том, что вы создали маршрутизацию ошибок, аналогичную той, которую использует Rails, когда при возврате во всплывающее окно с ошибками всплывающее окно не имеет возможности справиться с этим

0
ответ дан 2 December 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: