![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 24.11.10]
Регистрация: Jun 2010
Сообщений: 280
|
Не вижу большой разницы между классом в 500 строк и в 100-200. Вообще не заморочиваюсь на кол-ве, если речь не идет о скрипте в 1К и более. Мне важно, чтобы класс был четко, очевидно структурирован, до такой, желательно, степени, чтобы не было необходимости особо его комментировать, что бы он не решал несколько задач одновременно и т.д. в том же духе, в духе ООП. Только вот с классами документа у меня получаются, частенько, геморои. Раньше писал php, а там MVC выглядит скорее как VC+M, а не V+C+M. Надо перестраиваться
.
__________________
Ведь я только всего и хочу, чтобы все всегда было по-моему... Последний раз редактировалось Хомяк; 20.12.2010 в 03:22. |
|
|||||
|
Цитата:
Если создавать 2 независимых класса, то значительная часть функционала будет дублироваться. Есть ли смысл делать несколько отдельных классов? К тому же с учетом того, что часть функционала затрагивает поведение для обоих составных частей. С другой стороны согласно принципу единственной целесообразности - мы(я) имеем класс, который занимается воспроизведением звука (и как бы все, хотя потенциальных наворотов там может быть множество)
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 545
|
2TanaTiX
Выносите общий универсальный функционал в общий класс, потом наследуйте и дополняйте его в специализированных классах. |
|
|||||
|
[+1 24.11.10]
Регистрация: Jun 2010
Сообщений: 280
|
Вот у ребят в теме Визуальный редактор текста (WYSIWYG) этот момент (разделение общего и специфичного поведения объекта) хорошо показан. Почитайте, будете писать совершенно по другому.
__________________
Ведь я только всего и хочу, чтобы все всегда было по-моему... |
|
|||||
|
Цитата:
Но никто не обидится, если я кину init (конструктор считай) на 200 строк. private function init():void { _gfx = new GFXLobby(); super.addChild(_gfx); //model listening _model.addEventListener(LobbyEvent.SECTION_CHANGE, onNewSectionLoad); //checkboxes var _checkboxTableFilterFull:CheckBox = new CheckBox(_gfx.getChildByName("check2") as MovieClip); var _checkboxTableFilterEmpty:CheckBox = new CheckBox(_gfx.getChildByName("check1") as MovieClip); //var _checkboxFriendsOnline:CheckBox = new CheckBox(_gfx.getChildByName("check3") as MovieClip); _musicButton = _gfx.getChildByName("music_btn") as MovieClip; var val:* = SOManager.getValue("music"); var musicOn:Boolean = (val === undefined) || val; _musicButton.gotoAndStop(musicOn ? 1 : 2); if (musicOn) SoundMaster.runMusic(new SFXLobbyMusic()); _musicButton.addEventListener(MouseEvent.CLICK, onMusicButtonClick); _checkboxTableFilterEmpty.addEventListener(MouseEvent.CLICK, filterEmptyTables); _checkboxTableFilterFull.addEventListener(MouseEvent.CLICK, filterFullTables); _bannerTop = _gfx.getChildByName("banner_top") as MovieClip; _bannerTop.gotoAndStop(1); _rankIcon = new GFXRankSmall(); super.addChild(_rankIcon); _rankIcon.gotoAndStop(1); _rankIcon.visible = false; _rankIcon.x = 540; _rankIcon.y = 265; questProcess = (_gfx.getChildByName("quest_process") as MovieClip); questProcess.gotoAndStop(1); questFinished = (_gfx.getChildByName("quest_finished") as MovieClip); questFinished.gotoAndStop(2); questProcess.addEventListener(MouseEvent.CLICK, onQuestProcessClick); questFinished.addEventListener(MouseEvent.CLICK, onQuestFinishedClick); // //friends (_gfx.getChildByName("setup_btn") as SimpleButton).addEventListener(MouseEvent.CLICK, openSettings); (_gfx.getChildByName("lobby_sit_btn") as SimpleButton).addEventListener(MouseEvent.CLICK, onGoClick); (_gfx.getChildByName("sit_small") as SimpleButton).addEventListener(MouseEvent.CLICK, onGoClick); //lobby _commonTables=_gfx.getChildByName("lobby_all_tables_btn") as MovieClip _VIPTables=_gfx.getChildByName("lobby_vip_tables_btn") as MovieClip _privateTables = _gfx.getChildByName("lobby_privat_tables_btn") as MovieClip var _tableFilters:SimpleButton = _gfx.getChildByName("find_table_btn") as SimpleButton; _tableFilters.addEventListener(MouseEvent.CLICK, onTablesFilter); var _refreshButton:SimpleButton = _gfx.getChildByName("lobby_refresh_btn") as SimpleButton; _refreshButton.addEventListener(MouseEvent.CLICK, onRefreshClick); _commonTables.stop(); _VIPTables.stop(); _privateTables.stop(); _commonTables.addEventListener(MouseEvent.CLICK, commonTablesClick); _VIPTables.addEventListener(MouseEvent.CLICK, VIPTablesClick); _privateTables.addEventListener(MouseEvent.CLICK, privateTablesClick); _tableFilterText = _gfx.getChildByName("table_filter_text") as TextField; //_tableFilterText.addEventListener(KeyboardEvent.KEY_DOWN, onTablesFilter2); _tableFilterText.addEventListener(Event.CHANGE, onTablesFilter); _tableFilterText.restrict = "A-Za-zА-Яа-я0-9 "; _findPlaceButton = _gfx.getChildByName("lobby_find_table_btn") as MovieClip; _findPlaceButton.gotoAndStop(1); _findPlaceButton.addEventListener(MouseEvent.CLICK, onFindPlaceButtonClick); _findTableSmall = _gfx.getChildByName("find_table_small") as SimpleButton; _findTableSmall.addEventListener(MouseEvent.CLICK, onFindPlaceButtonClick); _startGameBigButton = _gfx.getChildByName("start_game_big") as MovieClip; _startGameBigButton.buttonMode = true; _startGameBigButton.useHandCursor = true; _startGameBigButton.addEventListener(MouseEvent.CLICK, onFindPlaceButtonClick); _sorters.name = _gfx.getChildByName("tables_sorters_name") as MovieClip; _sorters.name.gotoAndStop(1); _sorters.blind = _gfx.getChildByName("tables_sorters_blind") as MovieClip; _sorters.blind.gotoAndStop(1); _sorters.players = _gfx.getChildByName("tables_sorters_players") as MovieClip; _sorters.players.gotoAndStop(1); _sorters.money = _gfx.getChildByName("tables_sorters_money") as MovieClip; _sorters.money.gotoAndStop(1); _playersList = new PlayerList(); _playersList.x = 27; _playersList.y = 340; super.addChild(_playersList); //window tables var _ratingButton:SimpleButton = _gfx.getChildByName("rating_btn") as SimpleButton; var _giftButton:SimpleButton = _gfx.getChildByName("gift_btn") as SimpleButton; var _cashButton:SimpleButton = _gfx.getChildByName("kassa_btn") as SimpleButton; var _tournamentButton:SimpleButton = _gfx.getChildByName("tr_btn") as SimpleButton; var _userInfo:SimpleButton = _gfx.getChildByName("user_info_btn") as SimpleButton; var _awardsButton:SimpleButton = _gfx.getChildByName("awards_btn") as SimpleButton; var _statusButton:SimpleButton = _gfx.getChildByName("status_btn") as SimpleButton; _menuSectionIds = new Dictionary(); _menuSectionIds[_userInfo] = 0; _menuSectionIds[_cashButton] = 1; _menuSectionIds[_ratingButton] = 2; _menuSectionIds[_giftButton] = 3; _menuSectionIds[_tournamentButton] = 4; _menuSectionIds[_awardsButton] = 5; _menuSectionIds[_statusButton] = 6; _windowsStack = new Dictionary(); _userInfo.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); _ratingButton.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); _giftButton.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); _cashButton.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); _tournamentButton.addEventListener(MouseEvent.CLICK, onTournamentSelect); _awardsButton.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); _statusButton.addEventListener(MouseEvent.CLICK, onMenuButtonSelect); //misc _balanceText = (_gfx.getChildByName("balance_text") as TextField); _roomDetails = new RoomDetails(_gfx.getChildByName("in_list") as MovieClip,_gfx); super.addChild(_roomDetails); _leftMenu = new LeftWindow(); //_leftMenu.x = 228; //_leftMenu.y = 519; _leftMenu.setPosition(228, 519); _questList = new QuestList(_gfx.getChildByName("quest_list") as MovieClip, _baseModel); addEventListener(LobbyEvent.QUEST_WIDGET_CLICK, onQuestItemClick); _menu = new QuestContent(_baseModel); _menu.addEventListener(LobbyEvent.QUEST_INVITE_CLICK, onQuestInviteClick); //addEventListener(MouseEvent.CLICK, onTestClick); _userModelInfo.addEventListener(UserModelEvent.BALANCE_CHANGED, onBalanceChanged); _userModelInfo.addEventListener(UserModelEvent.EXP_CHANGED, onExpChanged); _userModelInfo.addEventListener(UserModelEvent.MAX_EXP_CHANGED, onExpChanged); _userModelInfo.addEventListener(UserModelEvent.NAME_GETTED, onNameGetted); _userModelInfo.addEventListener(UserModelEvent.VIP_CHANGED, onVipChanged); _userModelInfo.addEventListener(UserModelEvent.RANG_CHANGED, onRangChanged); _model.addEventListener(LobbyEvent.ON_PLAYERS_ONLINE_INFO, onPlayersOnlineInfo); if (_userModelInfo.firstName) { //we connected earlier onBalanceChanged(null); onExpChanged(null); onNameGetted(null); onVipChanged(null); onRangChanged(null); playersOnline = CacheTable.getCache(CacheInfo.PLAYERS_ONLINE); } } Хотя, в принципе реально во многих классах держаться планки ниже 500 строк. Только не всегда оправдано, имо. Добавлено через 41 минуту Цитата:
Смотри: Одна строчка в 80 шириной. Если разбить на 3 - будет 3 строчки мелкой шириной. Да, первая хуже читается, но разбивая число строк всё таки уменьшается =)
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось iNils; 20.12.2010 в 16:01. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 189
|
А что такое рефакторинг?
|
|
|||||
|
|
|
|||||
|
[+1 24.11.10]
Регистрация: Jun 2010
Сообщений: 280
|
Google отвалился?
http://ru.wikipedia.org/wiki/Refactoring
__________________
Ведь я только всего и хочу, чтобы все всегда было по-моему... |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|