分而治之_播放框架模块:分而治之
分而治之
通常情況是您開始開發(fā)應(yīng)用程序并繼續(xù)滿足需求。 當(dāng)您的應(yīng)用程序變得更大時,您開始意識到將其分為不同組件的便利。 而且,當(dāng)您開發(fā)第二個或第三個應(yīng)用程序時,您開始認(rèn)識到可以在不同應(yīng)用程序之間重用的某些功能。這是模塊化應(yīng)用程序的兩個很好的理由。 理想情況下,我們應(yīng)該針對具有高內(nèi)聚力和低耦合的組件。
Java語言已經(jīng)證明自己很適合完成此類任務(wù)。 它提供了通過接口,抽象類等強制使用定義良好的API的通用方法。
Play框架開發(fā)人員認(rèn)為,這對于開發(fā)通用庫是完全合適的,但是在Web應(yīng)用程序的情況下,可以通過其他方式最好地實現(xiàn)可重用性和模塊化。 看一下摘自play框架的FAQ的摘錄:
Java本身是一種非常通用的編程語言,最初并不是為Web應(yīng)用程序開發(fā)而設(shè)計的。 編寫通用且可重用的Java庫并創(chuàng)建Web應(yīng)用程序是非常不同的事情。 Web應(yīng)用程序本身不必設(shè)計為可重用。 您需要更少的抽象,更少的配置。 Web應(yīng)用程序確實存在可重用性,但是可通過Web服務(wù)API而不是語言級集成來實現(xiàn)。
因此,在可重用性方面,play為我們提供了更適合Web應(yīng)用程序的解決方案。
播放模塊
模塊只是另一個Play框架應(yīng)用程序。 唯一的區(qū)別是,模塊并非要自己運行,而必須包含在包含應(yīng)用程序中。
但是,模塊和常規(guī)應(yīng)用程序之間存在一些差異,主要是模塊沒有conf文件(必須由主應(yīng)用程序提供),并且模塊中的所有內(nèi)容都是可選的。
這樣做總比說好,所以像往常一樣,我們將尋找一個很好的機會來制作一個簡單的模塊來演示其工作原理。
創(chuàng)建一個新的播放框架應(yīng)用程序并將其部署到云中
眾所周知,我們正在研究play framework site的西班牙語翻譯 。 我們想向其中添加網(wǎng)絡(luò)分析,以便我們可以看到人們?nèi)绾问褂盟?
因此,為了遵循此示例,我們需要在Internet上某個位置部署一個play框架應(yīng)用。 如今,有許多免費的Java托管選項可用。 在這里,您有一些教程可以在openshift , google application engine和heroku上進行部署。
首先讓我們創(chuàng)建一個play框架應(yīng)用程序,然后在?/ devel / apps / module-test中創(chuàng)建該應(yīng)用程序,您可以選擇任意位置,只需確保適當(dāng)?shù)馗旅罴纯伞?要創(chuàng)建應(yīng)用,請在os提示符下運行以下命令:
現(xiàn)在是將它部署到某個地方的好時機。 對于本教程,我們將在openshift上進行部署,您可以使用所需的任何主機(有關(guān)為openshift部署設(shè)置環(huán)境的更多信息,請遵循本教程 )
在?/ devel / apps / module-test / openshift中創(chuàng)建一個新目錄,轉(zhuǎn)到該目錄并運行:
接下來,我們將擺脫演示應(yīng)用程序:
cd ~/devel/apps/module-test/openshift/analyticsapprm -fr pom.xml src然后,我們會將新創(chuàng)建的應(yīng)用程序編譯并打包為爆炸戰(zhàn)爭。 轉(zhuǎn)到?/ devel / apps / module-test文件夾并運行:
cd ~/devel/apps/module-testplay war analytics-app -o openshift/analyticsapp/deployments/ROOT.war~ _ _ ~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/ ~~ play! 1.2.4, http://www.playframework.org~JPDA port 8000 is already used. Will try to use any free port for debuggingListening for transport dt_socket at address: 5397800:22:38,021 INFO ~ Starting /home/sas/Dropbox/Public/devel/play/apps/module-test/analytics-app00:22:39,891 INFO ~ Precompiling ...00:22:49,075 INFO ~ Done.~ Packaging current version of the framework and the application to /home/sas/Dropbox/Public/devel/play/apps/module-test/openshift/analyticsapp/deployments/ROOT.war ...~ Done !~~ You can now load /home/sas/Dropbox/Public/devel/play/apps/module-test/openshift/analyticsapp/deployments/ROOT.war as a standard WAR into your servlet container~ You can't use play standard commands to run/stop/debug the WAR application...~ ... just use your servlet container commands instead~~ Have fun!~現(xiàn)在我們只需要提交應(yīng)用程序并將其推送到openshift上的git repo中:
cd ~/devel/apps/module-test/openshift/analyticsapptouch deployments/ROOT.war.dodeploygit add -Agit commit -m "deploy play framework app"git push origin 注意:由于播放框架庫的原因,第一次需要幾分鐘來推送應(yīng)用程序。 以后的推送會更快,git足夠聰明,只能發(fā)送更新的文件。
就是這樣,您剛剛將第一個應(yīng)用程序部署到了Red Hat的云中。 您可以在http://analyticsapp-opensas.rhcloud.com/上看到它運行(當(dāng)然,您必須用自己的openshift用戶名替換“ opensas”)。
Google Web分析和播放框架
將Google Web分析添加到Play應(yīng)用程序非常簡單。 您只需要一個gmail帳戶,然后轉(zhuǎn)到Google Analytics(分析)網(wǎng)站 ,單擊“注冊”,使用您的gmail帳戶登錄,并完成所有必需的數(shù)據(jù)。
在帳戶名稱中輸入“ analytics-app”,在網(wǎng)站的URL中輸入http://analyticsapp-opensas.rhcloud.com,同意條款和條件,然后單擊“創(chuàng)建帳戶”。
您將被帶到您的analytics-app帳戶頁面,在那里您可以看到跟蹤代碼。 您只需要將其粘貼到您的應(yīng)用中即可。 因此,請在?/ devel / apps / module-test / analytics-app / app / views / main.html中打開文件,然后將跟蹤代碼粘貼到結(jié)束標(biāo)簽的前面,如下所示:
注意:Google將為您提供您自己的UA-XXXXXXXX-1帳戶代碼,因此只需從Google Analytics(分析)帳戶頁面(而不是此頁面)復(fù)制并粘貼代碼!
現(xiàn)在,您只需要生成war文件夾,提交并再次將其推送到openshift即可部署您的更改。 每次進行更改時,都必須遵循以下相同步驟將其部署到openshift。
在http://analyticsapp-opensas.rhcloud.com/上再次訪問您的頁面,并查看頁面源代碼以檢查是否已添加跟蹤代碼。 您還可以在Google的分析頁面上看到它的運行情況,單擊“主頁”,實時(BETA)和“概述”。 您應(yīng)該只有一位訪客(是的,是您!)。
到目前為止,我們已經(jīng)創(chuàng)建了一個新的play應(yīng)用程序并將其部署到openshift。 然后,我們創(chuàng)建了一個Google分析帳戶,并將跟蹤代碼添加到我們的游戲應(yīng)用程序中。 一切正常,Google正在跟蹤我們的應(yīng)用。 現(xiàn)在,我們將將該功能移至模塊,以便我們可以從其他應(yīng)用程序中重復(fù)使用它。
創(chuàng)建一個模塊
要創(chuàng)建一個新模塊,您必須使用“ new-module”播放命令,如下所示:
cd /home/sas/devel/apps/module-test/play new-module analytics 現(xiàn)在,為了告訴我們的主要應(yīng)用程序(在我們的分析應(yīng)用程序中)包括此模塊,我們必須配置一個本地存儲庫 。
像這樣編輯?/ devel / apps / module-test / analytics-app / conf / dependencies.yml:
然后運行以下命令,告訴play解決依賴關(guān)系。
cd ~/devel/apps/module-test/analytics-appplay dependencies~ _ _ ~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/ ~~ play! 1.2.4, http://www.playframework.org~~ Resolving dependencies using /home/sas/devel/apps/module-test/analytics-app/conf/dependencies.yml,~~ analytics->analytics -> (from My local modules)~~ Installing resolved dependencies,~~ modules/analytics -> /home/sas/devel/apps/module-test/analytics/../analytics~~ Done!~現(xiàn)在,您可以在工作站上啟動主應(yīng)用程序:
cd ~/devel/apps/module-test/analytics-appplay run您可以在http:// localhost:9000看到您的應(yīng)用程序正在運行。
將跟蹤代碼移至可重復(fù)使用的標(biāo)簽
現(xiàn)在,我們將跟蹤代碼移動到模塊中定義的標(biāo)記中,因此我們將使用跟蹤代碼創(chuàng)建文件?/ devel / apps / module-test / analytics / app / views / analytics.html,如下所示:
<script type="text/javascript">var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();</script>現(xiàn)在,用對代碼的調(diào)用替換main.html中的跟蹤代碼,如下所示:
[...]<script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>#{get 'moreScripts' /}#{analytics /}</head>[...]從application.conf文件獲取模塊配置
我們的模塊幾乎準(zhǔn)備就緒,只有一件事阻止了我們真正在其他應(yīng)用程序上重用它:Google Analytics(分析)代碼硬編碼在我們的代碼中!
因此,我們將從application.conf文件中讀取它。 只需像這樣編輯analytics.html標(biāo)記:
并將以下內(nèi)容添加到您的主應(yīng)用程序配置文件中,該文件位于?/ devel / apps / module-test / analytics-app / conf / application.conf
analytics.code=UA-XXXXXXXX-1防止在開發(fā)模式下跟蹤
每次渲染頁面時,即使我們在開發(fā)工作站上工作,此標(biāo)記也將更新跟蹤器!
因此,我們將進行一些小的改進,以防止模塊在開發(fā)模式下工作時記錄頁面活動。
只需將以下條件添加到代碼中:
Openshift故障排除
Openshift無法解析相對于模塊位置的相對引用(實際上,任何部署的戰(zhàn)爭應(yīng)用程序都會遇到相同的問題),因此您必須告知play將模塊源復(fù)制到包含應(yīng)用程序之前,戰(zhàn)爭文件夾。 只是發(fā)出:
cd ~/devel/apps/module-test/analytics-appplay dependencies --forceCopy就是這樣,現(xiàn)在您可以按常規(guī)方式部署到openshift:
cd ~/devel/apps/module-testplay war analytics-app/ -o openshift/analyticsapp/deployments/ROOT.warcd openshift/analyticsapp/git add -Agit commit -m "added analytics module"git push origin使用“ play run”在本地運行您的網(wǎng)站,還可以從http://analyticsapp-opensas.rhcloud.com/打開它,檢查兩個網(wǎng)站的源代碼,您應(yīng)該看到在openshift上運行的應(yīng)用包含跟蹤代碼,與您的本地申請相反。
結(jié)論
在這篇文章中,我們看到了如何將play框架應(yīng)用程序部署到openshift,更重要的是,如何將功能從應(yīng)用程序轉(zhuǎn)移到模塊,以便從其他應(yīng)用程序重用它。
您可以在本文中了解有關(guān)模塊的更多信息,或閱讀play框架文檔 。
如果您說西班牙語,則可以幫助我們進行翻譯 ,也可以在這里查看我們的工作…您可以確保您獲得的每次點擊都將得到跟蹤!
參考: Play框架模塊:在“ 玩轉(zhuǎn)Play框架”中 ,我們的JCG合作伙伴 Sebastian Scarano進行了分而治之 ! 博客
相關(guān)文章 :
- 玩! 框架:為什么我會愛上它
- 簡單的Twitter:Heroku上的Play框架,AJAX,CRUD
- RabbitMQ播放模塊! 構(gòu)架
- Google App Engine上的Spring MVC和REST
- Spring MVC開發(fā)–快速教程
- Spring MVC3 Hibernate CRUD示例應(yīng)用程序
翻譯自: https://www.javacodegeeks.com/2012/01/play-framework-modules-divide-and.html
分而治之
總結(jié)
以上是生活随笔為你收集整理的分而治之_播放框架模块:分而治之的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 施工图备案表哪个单位提供?(施工图备案表
- 下一篇: 滥用static_沉思滥用:“强力使用,