![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Товарищи, есть такой дурацкий вопрос:
Как вы осуществляете повторное использование компонент? Под компонентой здесь подразумевается некий кусок веб-приложения, состоящий из perl - кода, каких-то структур в базе, шаблонов (например TT), отдельных скриптов. Вопрос возник потому, что обычно говорят повторное использование модулей перл. И как это делать знают все. Я же встретился со случаем когда имеется множество проектов, функционал которых во многом пересекается, например в каждом есть модуль новостей, который умеет: 1) скачивать новости по RSS 2) предоставляет небольшую админку хранимых новостей 3) обрабатывает картинки 4) ну и типичная логика выборки новостей из базы. Каждый раз когда на новый проект нужно добавить функционал новостей - приходится копировать код, шаблоны и т.п. откуда-то и допиливать. Как решаете эту проблему вы ? может кто знает как с этим обстоит дело в catalyst и mason ? |
|||
|
||||
| DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 2 Всего: 13 |
по моему точно так же
-------------------- |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
sir_nuf_nuf, должна быть правильная архитектура (парадигма) прогарммы
такое часто замечал (правда на пхп), если использовать, например, DBIx::Class где все будет очень всего красиво в ООП, и если нужно добавить какие-то таблицы и изменить программу, то надо очень много переписывать - лучше удалить и написано заного в Catalyst очень хорошо сделано... но на нем можно писать по разному... Это сообщение отредактировал(а) gcc - 20.10.2009, 11:11 |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
Есть более-менее стандартный подход: общий функционал выделяется в модули (тут можно подумать как про модули для некого движка, так и простые перл-пакаджи оформленные, например, в виде mixin'ов). Затем все это дело подключается при необходимости. Пункты 1-4 как раз подходят для этого (кроме, может, 2). Это что касается кода.
Стуктуры данных. Ну тут вроде тоже очевидно: писать скрипт который будет создавать таблицы (или добавить эту часть в скрипт деплоймента). А вот относительно шаблонов, не знаю, честно говоря. Раньше сам сталкивался, решал тоже копированием файлов. Сейчас проще, т.к. структура страницы и ее внешний вид описаны в разных местах. Достаточно переключить файл с описанием. Можно конечно попробовать замутить такое и на Mason/TT, но имхо сложно получится. -------------------- Died at Life.pl line 21 |
|||
|
||||
| gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
sir_nuf_nuf, я навреное вас не правильно понял, когда сделаете - покажите
ну там есть много вариантов http://search.cpan.org/~flora/Catalyst-Run...Type/Chained.pm
вот я красиво диспатчизировал:
|
||||
|
|||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
кстати, я тоже хотел спросить вот например у меня есть модуль для комментариев, расчитано чтобы ставить комментарии в темах, НО если я хочу сделать этот модуль почти похожим еще как минимум для 5 элементов (кроме тем), например комментарии в: фото, видео, приватные, групыы, и блоги.... т.е. один и тот код нужно использовать минимум 7 раз даже один и тот же КОД и более-менее сложный (перебор и т.д.) как лучше написать? старатся писать все в кучу? или писать один и тот же большой код 10 раз? кто как бы тут сделал? ну вот:
например, я не давно работал с одной программой где было все в куча нуписано на ORM, и разобратся все сложно другими словами: есть 20 модулей которые связываються между собой и все как один модуль!! чтобы изменит например 3-4, то нужно все переписать или многие модули переписать, т.к. получается что нужно все 20 переписать из этого следует: просто все переписать или сделать все в кучу... ====== но вот я как раз читал где-то в списке рассылке, говорилось про недостатки DBIC, в том что все контроллеры должны быть не однородными!! т.е. в DBIC, можно крассиво написать код к 10 контроллерам, и может полуиться, так что нужно будет изменить программу! изменит 2 контроллера, а изменить не получиться, так как остальные 8 работать не будет, потому что они будут взаимосвязывающиеся ( все однородные ) и прейдется все 10 переписывать, вот лучше удалить все и написать заново… Это сообщение отредактировал(а) gcc - 28.10.2009, 07:55 |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Ага вот где-то здесь проблема и возникла. Использовать повторно перл - код - не проблема. Проблема появляется с шаблонами, скриптами, SQL - скриптами, т.е. с тем для чего не применимо ООП. А так же когда иногда нужно бывает добавить к этому сквозной функционал - допустим для какой-нть сущности добавить - колонку в базе - поле в классе - чекбокс в шаблонах админки - изменить логику выборок и т.п. т.е. изменение мелкое но проходит по всему компоненту. Пока стараемся максимум логики переносить в перл-код, скрипты, SQL - скрипты - генерим "по шаблону", но за счет того что они простые - их легко и поменять при необходимости.. С шаблонами совсем туго.. По ходу будем просто максимально их облегчать и переписывать с нуля при необходимости. |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
подскажите кто как бы тут сделал? я код привел, может я не правильно модель ООП сделал? или тут реально все равно? Это сообщение отредактировал(а) gcc - 28.10.2009, 08:44 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
подскажите как даннй код написал, понятно?
просто я старался писать компактно и красиво и этим не много усложнил логику внешнего вида кода... или нормально? не трубует рефакторинг? хотел сделать рефакторинг, но подумал что может не надо, если еще короче писать - то будет еще больше запутано код сюда не поместился, я написал его сюда: http://lissyara.org.ua/view_content/74 |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: нет Всего: 1 |
Повторное использование не всегда оправдано. Причина - постоянно приходится добавлять функционал и заботиться об обратной совместимости.
|
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |