LINUX.ORG.RU

Работа с зависимостями. Правильные подходы

 ,


0

1

У меня есть уже 2 проекта (1й - руби, 2й - JS), где есть ядро и есть «модули». между модулями есть зависимости (например для работы модуля Z нужны результаты работы модуля R). В обоих случаях я написал довольно похожые костыли, которые решают минимальные? проблемы при работе с зависимостями. и если в первом случае мой внутренний code review`er молча соглашается, то во втором говорит что это плохо и нужно как-то переделать. но на верхнем этаже разум говорит что пока никаких идей нет.

Второй случай (проэкт написан на JS, исполняется в встроенной JS VM win app`a) плох хотя бы тем что модули нужно включать в сборку в определённом порядке иначе..

        ... SKIPPED ...
        <concat destfile="${OUTPUT_FILE}" fixlastline="true" append="true"      
            encoding="${INT_CP}" outputencoding='${INT_CP}'>                    
                                                                                
            <!-- ============================================================   
            //                                                                  
            //   all spec files that is required for power_sprint script        
            //   must be included only here                                     
            //                                                                  
            //   WARNING: order is highly important!                            
            //                                                                  
            // ========================================================== -->   
            <filelist dir="specs">                                              
                <file name="runtime_constants.js" />                            
                <file name="accel_x_acceleration.js" />                         
                <file name="accel_x_acceleration_zeroline.js" />                
                <file name="accel_x_speed.js" />
            ... SKIPPED ...

поэтому приветствуюется любая инфа как правильно «готовить» обвязку для зависимостей.

в тред приглашаются архитекторы всея ЛОРа и quake`ский человек-снайпер tailgunner, автор несоизмеримого числа форков gtk прожектов geekless, человек c голодной аватарой baverman в том числе

★★★★★

Последнее исправление: ZuBB (всего исправлений: 5)

Если модули твои, то не вижу ничего плохого в хранении «зависимостей» в ант-файле. Пока их мало (десяток-полтора) и добавление нового модуля можно сделать руками, конечно.

baverman ★★★
()
Ответ на: комментарий от ZuBB

Тогда очевидное решение: скрипт, который парсит заголовки модулей и склеивает их согласно зависимостям. Или ругается, если найдет цикл.

baverman ★★★
()
Ответ на: комментарий от baverman

меня парит то что я не могу сейчас сделать примерно так

            <fileset dir="lib/core" includes="*.js" />                          

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

да, один раз я уже такой код написал, но дважды написанный код просится быть оформленным в либу. а я почти уверен что такая либа уже написана. и не хочется изобрентать новые колёса

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от ZuBB

в случае CL такой код оформлен следующем образом:

(defsystem "ganja-bot"
  :description "Bot to play in www.ganjawars.ru. Starting in 04.2012"
  :version "0.0.1"
  :defsystem-depends-on (:cl-ppcre
			 :closure-html
			 :cl-html-parse
			 :drakma)
  :components ((:file "helper")

	       (:file "common"
		      :depends-on ("helper"))
	       
	       (:file "types" 
		      :depends-on ("helper"))
		 
	       (:file "html-parse-extensions" 
		      :depends-on ("helper"
				   "types"))
	       
	       (:file "personage-routines" 
		      :depends-on ("helper" 
				   "common"
				   "types"
				   "html-parse-extensions"))
	       
	       (:file "war-routines"
		      :depends-on ("helper" 
				   "common"
				   "types"
				   "html-parse-extensions"))
	       
	       (:file "scenarios" 
		      :depends-on ("helper"
				   "common"
				   "html-parse-extensions"
				   "types" 
				   "war-routines"
				   "personage-routines"))))
		 
это к примеру

pseudo-cat ★★★
()
Последнее исправление: pseudo-cat (всего исправлений: 1)
Ответ на: комментарий от ZuBB

Это все называется «мавен», кстати. Лучшее из существующих решений. Правда все, что не-жаба в него укладывается не очень.

Можешь писать mojo

vsn
()
Ответ на: комментарий от ZuBB

Плагин к мавену свой напиши. Все равно ничего круче POM не придумаешь, так заюзай его и мавеновский резолвер. И напиши моджо под свою предметную область, лолка.

vsn
()
Ответ на: комментарий от vsn

добавлять в проект еще одну тулзу для сборки да еще писать плагин к ней как то не очень хочется..

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от ZuBB

Тогда страдай. Проблема в том, что вопрос решался уже неоднократно и лучшее решение (особенно в гетерогенном проекте) - это POM.

vsn
()
Ответ на: комментарий от ZuBB

«Лучшее», кстати, не означате «хорошее» или «идеальное». Вопрос о зависимостях - он ужасен, сложен и вечен.

vsn
()

поэтому приветствуюется любая инфа как правильно «готовить» обвязку для зависимостей.

Генератор зависимостей, готовый или самодельный.

Правда, у тебя, насколько я понимаю, зависимость по данным - вряд ли такое распутаешь генератором зависимостей. Можно попробовать аннотировать код, но baverman уже предложил что-то такое. Общепринятого способа решения зависимостей по данным я не знаю (ну, кроме shell %)).

tailgunner ★★★★★
()

Посмотри в сторону RequireJS

оно тебе и в один js файл потом может собрать все, что надо в нужном порядке.

Если хочешь костылей то генерирую список зависимостей, загоняй в tsort и получишь порядок, в котором их надо включать (+ошибка если где цикл обнаружится)

redbaron ★★
()
Ответ на: комментарий от redbaron

/*еще не открыв его homepage*/ слышал о таком. а он вне броузера или ноды может жыть? (у меня env - JS VM встроенная в win app)

ZuBB ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.