2014-03-30 63 views
3

我想在我的第一個應用程序中使用Perl Dancer模塊。第一個應用程序中創建/,其中包含此代碼調用MyWeb即可,應用程序/箱文件app.pl:所有請求的Perl Dancer index.cgi

use Dancer; 
use MyWeb::App; 
dance; 

和一個名爲MyWeb即可,應用程序/ lib目錄/ MyWeb即可/ App.pm包含此代碼:

package MyWeb::App; 
use Dancer ':syntax'; 

our $VERSION = '0.1'; 

get '/' => sub { 
    template 'index'; 
}; 

true; 

我想要一個index.cgi文件來提供我所有的應用程序請求。我的問題是, 是否必須將我的所有操作/方法放在同一個MyWeb-App/bin/app.pl文件中,並且對於MyWeb-App/lib/MyWeb/App.pm模塊等每個操作/方法,都需要模塊 。

的原因是我的應用程序將包含數百個動作是這樣的:

get 'register' => sub {...}; 
post 'save_register' => sub {...}; 
get 'contactus' => sub {...}; 
post 'save_contactus' => sub {...}; 
..... 
get 'order' => sub {...}; 
post 'process_order' => sub {...}; 

所以我必須把這樣的行動都在一個主要的index.cgi,我每次都修改這個文件我爲應用程序添加一個新操作或新模塊。

簡而言之,如何以模塊化方式進行大量操作的應用程序,以便在一個模塊文件中的每個操作都易於維護,但其他開發人員可以嚮應用程序添加單獨的模塊,而不會重疊/破壞主要的index.cgi。

以我定期無框架應用程序,我只基於路線/動作的加載模塊,所以加載每人行動路線只有一個模塊與一個簡單的邏輯是這樣的:

if ($route eq "register") { eval "use register.pm"; register(); } 

elsif ($route eq "save_register") { eval "use register.pm"; save_register(); } 
.... 
.... 
elsif ($route eq "contactus") { eval "use contactus.pm"; contactus(); } 
+0

我會建議發佈您的第二個問題作爲一個實際的單獨問題。 – ysth

+0

@ysth我按照你的建議 – daliaessam

回答

3

「的index.cgi '不在Perl Dancer中使用。

該框架旨在讓您將應用程序分解爲一堆邏輯模塊。以合理的方式對它們進行分組。例如,對於具有照片的論壇應用程序,您可能有一個「用戶」模塊,一個「消息」模塊和一個「照片」模塊。

在app.pl,你會:

use Dancer; 
use MyWeb::Users; 
use MyWeb::Messages; 
use MyWeb::Photos; 
dance; 

然後,您可以創建./lib內3個不同的.pm的文件,說users.pm,消息,下午,photos.pm等,然後爲每個模塊包含相關路線。您的路線可能以/ user/,/ message/和/ photo/*開頭。例如,POST/user,GET/user等。考慮使用前綴函數。

這應該保持您的項目易於管理,並組織您的路線。隨着項目的增長以及添加更多模塊,您只需修改app.pl並添加新模塊(和路由)即可。

+1

這樣做了,你是正確的,這是我的問題,如果我的應用程序是500個模塊,這意味着app.pl(這是我的index.cgi)將加載這些500個模塊與每個請求的情況下使用CGI可能非常慢。這是我關於Dancer邏輯的主要問題,爲什麼不根據路線加載分析的模塊。 – daliaessam

+1

不,app.pl在第一次啓動服務器時執行ONCE(實際上,如果您正在開發並更改app.pl或任何模塊,則必須重新啓動服務器)。如果您有500條路線,速度將基於解析URL並確定哪條路線。這實際上相當快,當然比一個大的index.cgi文件快得多。 – yahermann