![]() |
использовать или не использовать интерфейсы
Заметил за собою, что во Флеше, уже который раз предпочитаю использовать возможность передачи функции, нежели создание интерфейса (хотя в других языках, где невозможно передавать функции как параметр, достаточно юзаю интерфейсы).
Например класс Х работает с другими классами у которых есть функция DoSomeThing. Можно Код AS3:
А можно Код AS3:
|
Передаю то, что нужно для задачи. К функциям пишу комментарий типа: addChild->DisplayObject->DisplayObject.
|
Зависит от задачи. Если предполагается, что нужна функция (например, какая-нибудь filterFunction), то передается функция. Если предполагается работа именно с классом, то интерфейс. У того же процессора, помимо DoSomeThing могут быть и параметры, которые необходимо настроить.
|
Ответы расплывчаты. Я так понимаю вы тоже как я использууете.
Вот к примеру для Undo что я делаю. Все классы в которых можно сделать Undo должны иметь функции undo и redo. Какое решение бы вы использовали. интерфейс или две функции?? |
Можно и наследование использовать. Если нет возможности, то интерфейс.
|
Вопросы не менее расплывчаты. Какое отношение некие классы имеют к undo/redo? Я бы реализовал undo/redo командами, и они бы имели интерфейс.
|
Цитата:
Немного умственных потуг принесут гораздо большее удовлетворение. С одной стороны - обеспеченные тылы, с другой - светлое будущее. Не передавай ссылки на функции там, где не нужно этого делать. |
Цитата:
Только беда в том, что на дворе 2011 год, а в actionScript3 до сих пор параметры функций не типизируются во время компиляции (в haXe это было и есть даже для flashplayer8), как, врочем и генериков до сих пор нет :( А вспомнить какие параметры надо передавать в этот колбек и надо ли - очень тяжело. Поэтому предпочитаю использовать интерфейсы во всех случаях, при которых это не приводит к нагромождению кода и другим проблемам (а часто приводит) Ну, или, да, наследование использовать (очень весело разбираться какой перегруженный метод должен вызваться каким неперегруженным, но передача нетипизированных функций менее привлекательна) |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Передавая классу функцию Вы завязываете этот класс на СИГНАТУРУ функции, а НЕ на ее реализацию т.е. просто вместо передачи 1-го интерфейса с 3-мя методами вы передаете 3 мелких ИНТЕРФЕЙСА-функции А как известно из принципов SOLID "лучше несколько мелких интерфейсов, чем один большой" Так что все с точностью наоборот :) Цитата:
Цитата:
да и громоздить композицию (т.е. наращивать объемы кода, который придется поддерживать) раньше времени не стоит Тут все диктует конкретная ситуация, причем эта ситуация меняется вместе с проектом. Сначала можно сделать наследованием. Если эта часть системы не расширяется - зашибись, расширяется - переходим на композицию. А раньше времени переходить - себе дороже. |
| Часовой пояс GMT +4, время: 07:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.