Почему синглтоны пронизывают культуру ActionScript? - PullRequest
6 голосов
/ 16 июня 2009

Я недавно начал заниматься программированием на ActionScript / Flex, и я ... удивлен ... количеством синглетонов, которое я вижу. Они повсюду! Стандартная библиотека, фреймворки ... Черт, сегодня утром я даже читал пост в блоге, где автор упомянул, что он переделал некоторые из своих классов в одиночку INTO!

Есть ли разумное объяснение тому, почему сообщество AS так любит одиночные игры?

Ответы [ 5 ]

5 голосов
/ 16 июня 2009

Я думаю, что это происходит от старого способа работы Flash ... В те старые времена не было много тяжелых программистов, занимающихся флеш-памятью, лишь немногие, и их считали вундеркиндами (и это справедливо). Большинство людей были людьми, которые перешли из печатной индустрии ... они думали, что Flash был новым Illustrator для Интернета.

В старые времена разработчики флеш-памяти использовали простой в использовании ' TellTarget ', чтобы добраться до определенного мувиклипа, который мог быть вложен в мувиклип внутри мувиклипа внутри ... и т. Д. как это было сделано ... у этих людей (включая меня) никогда не было никакого программного обеспечения, поэтому мы жили в этом визуальном мире, а Flash думал так, как думали дизайнеры. В AS2 у многих людей (как тех, кто был, так и тех, кто плохо разбирался в кодировании) также было много проблем с потерей «границ» внутри классов ... Я помню Proxy-класс, который помог нам не потерять область видимости в классе , Много головных болей в эти дни. Люди, которые постепенно совершенствовали свою мудрость кода, никогда не зацикливались на новых способах кодирования в ООП ... некоторые из них думают, что синглтон может использоваться как своего рода « global ». Они всегда могут говорить с этим глобальным из любой точки своего приложения.

Я думаю, что это так просто ...

5 голосов
/ 16 июня 2009

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

Кроме того, синглтоны уменьшают влияние на объекты, которые дорого создавать.

3 голосов
/ 16 июня 2009

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

3 голосов
/ 16 июня 2009

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

Каждый должен прочитать блог Мишко Хевери ( начните с этого ). Он приводит несколько отличных аргументов против их использования.

У синглтонов действительно есть применение, например, у Logger, но они слишком используются.

@ skaffman Что касается преимуществ в производительности, совершенно разумно иметь один экземпляр объекта в вашем приложении без реализации шаблона Singleton.

0 голосов
/ 16 июня 2009

С тех пор я изменил свою позицию в этом отношении.

Использование объектов в actionscript3 помогло мне улучшить модуляцию.

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

Я думаю, что для этого есть две причины.

1.) Говорить об основах скучно, поэтому большая часть информации слишком сложна. ООП на самом деле просто разбивает систему на понятные для повторного использования части.

2.) Процедурное программирование аналогично рабочему процессу, оно блокирует вас в определенном рабочем процессе, но для начинающих программистов это облегчает понимание

3.) Многое из флэш-памяти связано с управлением состоянием виджета флэш-памяти, поэтому имеет смысл на некотором уровне управлять информацией из одного центрального места.

---------------- оригинальный ответ ----------------

Я являюсь частью сообщества AS, которое любит (и использует) синглтоны.

Я относительно новичок в программировании (профессионально 3 года на PHP / MySQL / Javascript / Actionscript).

Я думаю, что существует четкое различие между модульным программированием и классическим ООП на основе наследования классов.

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

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

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

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

Я делаю ядро ​​и делаю модули для привязки к ядру, но никогда не допускаю, чтобы подобъект был расширением ядра. Я думаю, что расширение класса является громоздким и замедляет развитие, устраняя необходимую гибкость.

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

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

Я за ООП, но я предпочитаю подход синглтон, прототип или модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...