|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 28.12.10]
[+1 29.12.10] Регистрация: Aug 2006
Сообщений: 107
|
использовать или не использовать интерфейсы
Заметил за собою, что во Флеше, уже который раз предпочитаю использовать возможность передачи функции, нежели создание интерфейса (хотя в других языках, где невозможно передавать функции как параметр, достаточно юзаю интерфейсы).
Например класс Х работает с другими классами у которых есть функция DoSomeThing. Можно public interface iprocessor { function DoSomeThing(par:int):void; } public class X { function setProcessor(o:iprocessor){ .... } } А можно Так вот, второй метод проще. Как минимум не приходится создавать лишний файл (интерфейса) и не приходится навязывать классу имя метода (соответственно он не может конфликтовать с другим интерфейсом). Поэтому, если функций до трех (включительно), то я (точнее душа моя) предпочитаю обходится без интерфейса. А как вы делаете? И в чем преимущества такого решения (допускаются даже субъективные варианты типа "при дебаге удобнее"). Последний раз редактировалось iNils; 09.01.2011 в 02:45. |
|
|||||
Зависит от задачи. Если предполагается, что нужна функция (например, какая-нибудь filterFunction), то передается функция. Если предполагается работа именно с классом, то интерфейс. У того же процессора, помимо DoSomeThing могут быть и параметры, которые необходимо настроить.
|
|
|||||
[+1 28.12.10]
[+1 29.12.10] Регистрация: Aug 2006
Сообщений: 107
|
Ответы расплывчаты. Я так понимаю вы тоже как я использууете.
Вот к примеру для Undo что я делаю. Все классы в которых можно сделать Undo должны иметь функции undo и redo. Какое решение бы вы использовали. интерфейс или две функции?? |
|
|||||
.
|
Цитата:
Немного умственных потуг принесут гораздо большее удовлетворение. С одной стороны - обеспеченные тылы, с другой - светлое будущее. Не передавай ссылки на функции там, где не нужно этого делать. |
|
|||||
Цитата:
Только беда в том, что на дворе 2011 год, а в actionScript3 до сих пор параметры функций не типизируются во время компиляции (в haXe это было и есть даже для flashplayer8), как, врочем и генериков до сих пор нет А вспомнить какие параметры надо передавать в этот колбек и надо ли - очень тяжело. Поэтому предпочитаю использовать интерфейсы во всех случаях, при которых это не приводит к нагромождению кода и другим проблемам (а часто приводит) Ну, или, да, наследование использовать (очень весело разбираться какой перегруженный метод должен вызваться каким неперегруженным, но передача нетипизированных функций менее привлекательна) Последний раз редактировалось expl; 10.01.2011 в 01:00. |
|
|||||
Извините, не согласен. Насколько я знаю, должно быть как раз наоборот. Не буду долго объяснять, просто процитирую труд Гаммы, Хелма и других товарищей из Gang Of Four "Design Patterns:Elements of Reusable Object-Oriented Software":
Цитата:
Цитата:
Цитата:
|
|
|||||
Цитата:
Передавая классу функцию Вы завязываете этот класс на СИГНАТУРУ функции, а НЕ на ее реализацию т.е. просто вместо передачи 1-го интерфейса с 3-мя методами вы передаете 3 мелких ИНТЕРФЕЙСА-функции А как известно из принципов SOLID "лучше несколько мелких интерфейсов, чем один большой" Так что все с точностью наоборот Цитата:
Цитата:
да и громоздить композицию (т.е. наращивать объемы кода, который придется поддерживать) раньше времени не стоит Тут все диктует конкретная ситуация, причем эта ситуация меняется вместе с проектом. Сначала можно сделать наследованием. Если эта часть системы не расширяется - зашибись, расширяется - переходим на композицию. А раньше времени переходить - себе дороже. Последний раз редактировалось dimarik; 10.01.2011 в 03:27. Причина: трудный пост. |
Часовой пояс GMT +4, время: 21:25. |
|
« Предыдущая тема | Следующая тема » |
|
|