2009-09-06 69 views
2

我對PHP比較陌生,但是在具有SOA架構和多層應用程序的複雜企業環境中經驗豐富的Java程序員。在那裏,我們通常會在中間層使用業務邏輯來實現業務應用程序。使用PHP的多層應用程序?

我正在編程一個替代貨幣系統,應該易於個人和社區部署和定製;它將是開源的。這就是爲什麼php/mysql似乎是我的最佳選擇。

用戶有帳戶,他們得到一個餘額。此外,系統根據交付的總服務和總可用資產計算價格。

這意味着,在購買時發生了一系列計算;餘額和總數得到更新;這些是派生的數字,通常不會放入數據庫中。儘管如此,我採取了將觸發器和存儲過程放入數據庫,以便在php代碼中不做任何更新。

人們認爲什麼?這是一個好方法嗎?我的經驗告訴我,這不是最好的解決方案,並促使我實施中間層。但是,我甚至不知道該怎麼做。另一方面,到目前爲止,我對商店流程的看法在我看來是最合適的。

我希望我明確提出了我的問題。所有評論贊賞。可能沒有一個「完美」的解決方案。

回答

1

就像現在這種趨勢一樣,遠離DB一般是件好事。您可以更輕鬆地進行版本控制,並且只需使用一種語言即可工作。更重要的是,我覺得存儲過程是一個艱難的路要走。另一方面,如果你喜歡那些東西,並且對MySql中的SP感到滿意,它們並不壞,但我的感覺一直是它們更難以調試並且難以處理。

在觸發器問題上,我不確定這是否是您的應用程序所必需的。由於觸發計算的事件是由用戶調用的,所以即使用戶在此期間重定向到「等待」頁面或其他頁面,這些情況也可能發生在PHP中。顯然,真正的觸發器只能在數據庫級別完成,但是您可以使用每X秒運行一次PHP腳本的守護進程線程......不惜一切代價避免這種情況,並嘗試從用戶端觸發事件。

所有這一切都說,我想在PHP上插入我最喜歡的數據訪問層解決方案:Doctrine。這並不完美,但PHP就是這樣,這已經夠好了。大部分是你想要的,並且讓你使用對象而不是數據庫過程等等。

關於你的標題,在PHP中,多層是完全可行的,但你必須做,並尊重它們。 PHP代碼可以調用其他PHP代碼,現在(5.2+)很好地運行OO等等。確保忽略這樣一個事實,即你會看到很多PHP代碼都是廢話,甚至不使用方法,更不用說層級了,還有體面的OO建模。如果你想要做到這一切都是可能的,包括做你自己的(或使用現有的)MVC解決方案。

+0

順便說一句,使用存儲過程並不一定排除源控制,相反,你可以並且應該把所有的代碼放到源代碼控制中。 – 2009-09-06 13:12:22

+0

True Anti,任何東西都可以受版本控制,但PHP代碼特別適合。 MySql SPs被困在數據庫中,對吧? – 2009-09-06 13:34:15

+0

不,您將SP源代碼保存在文件中(因此在版本控制中),然後在部署時將它們加載到數據庫。簡單:) – 2009-09-06 17:52:21

0

使用觸發器和存儲過程以及由您的數據庫服務器提供的其他功能絕對沒有問題。它的工作原理和工作良好,你正在使用數據庫的全部潛力,而不是簡單地將其歸入簡單的數據存儲。

但是,我敢肯定,對於在這裏與你(和我)同意的每一位開發者,至少有同樣的想法正好相反,並且有很好的經驗。

0

謝謝你們。

我使用數據庫觸發器,因爲我認爲這可能更容易控制事務的完整性。您可能會意識到,我是一位開發人員,他也在努力掌握db知識。

現在,我看到有解決方案將php代碼分佈在多個層上,不僅在邏輯上而且在物理上通過部署在不同的服務器上。然而,在這個發展階段,我認爲我會堅持我的觸發器/ sp解決方案,因爲這不會是錯誤的。分佈在多個圖層上需要我重新設計我的應用程序。如果有人喜歡另類金錢系統,人們可能會更容易地爲他們的需求更改佈局,而我不需要擔心如果人們觸摸php代碼就會導致計算錯誤。

另一方面,當然,我同意數據庫的東西可能會很難調試。

數據庫初始化腳本的源碼控制,是不是一個數據抽象層的PHP文件:)

再次感謝

1

一個與推手的功能,數據庫級別的問題,是您會被鎖定到DBMS的功能集中。經常編寫開源軟件,以便它可以用於不同的DB(當然不總是)。有可能你會想要使它容易移植到postgres或其他DBMS。現在使用大量的MySQL特定功能將會變得更加困難。