我是一名普通的perl程序員。我對語言本身沒有問題,但是用「好」對象設計。雖然我能理解(大部分)CPAN模塊,但沒有嚴重的問題,我甚至無法設計自己的簡單對象層次結構。Perl/Moose OO設計,包層次結構
實例 - 現在面臨的一個非常簡單的應用程序(Web和命令行界面):
- 已認證的學生上傳了一個zip文件(什麼包含渲染作業)
- 解壓縮文件和新的目錄,並檢查它的內容(應包含exatly一個文件
commands.txt
)和零個或多個圖像 - 如果內容爲確定 - 移動到地方叫目錄:
JobRepository
(另一個目錄) - 如果用戶決定運行渲染作業 - 從他自己的
JobRepository
發送工作全局渲染隊列(再次,另一個目錄) - 另一個進程從隊列(FIFO - 設計與IPC::DirQueue)主罰工作和執行渲染過程
- 完成後,把結果到用戶
JobRepository/result
目錄 - 發送電子郵件給用戶
- 學生可以下載壓縮結果
在bash
它是可行的少「不復雜「bash腳本 - 但我想這樣做在Perl(因爲網絡接口) - 並希望實踐Perlish的(麋鹿)對象設計...
在這裏開始我的問題。
試過「視覺」名詞解析方法並製作下一張圖片。
發佈的圖像,因爲它是 「短」 爲:
package Iren::JobRepo;
use Moose;
use warnings;
has 'Jobs' => (is => 'rw', isa=>ArrayRef[Iren::Job]);
…
method AddJob {
...
}
等
正如你所看到的,這是非常簡單的 - 但immediatelly面臨一些決定問題,例如:
- 什麼對象應該執行unzip/zip/checkJob方法?它屬於:JobRepository的作業「拉鍊」本身?
- 什麼對象應該發送電子郵件給用戶?
$user->send_email
- 來我愚蠢,因爲我們發送電子郵件給用戶,而不是用戶本身... - 「誰」應該從用戶的JobRepo發送作業到RenderQueue?
JobRepo->SendJobToRenderQueue
或我應該撥打RenderQueue->addJob
方法? - 什麼對象應該應該使用ISA
IPC::DirQueue
- (應該是RenderQueue的implememtation) - 循環定義。 用戶已有 JobRepository,存儲庫有很多Jobs,但Job 有?用戶? (要知道向誰屬於工作) - 等..
正如你所看到的,沒有角色,在這裏沒有性狀 - 什麼 - 這是簡單的... - 但充滿問題:(
任何人都可以幫助清除混亂?什麼應該是「好」包層次?
所以,我真的迷路了,我開始失望自己。但我必須問他們...
- 如何學習perl/Moose的好對象設計? (我可能永遠不會使用另一種語言)
- 搜索谷歌關於對象設計(和Stackoverflow太多)被引用了「Gand of Four」書(和其他幾個)。但通常用於Java。 perl/Moose是值得購買的嗎?或者,這裏還有一些perl/Moose的好書嗎?
- 是一些很好的技巧,如何檢查正確的對象設計?
- 來自UML的代碼生成器可能不存在爲穆斯 - 或者在這裏的東西可用和推薦?
- 簡單 - 你如何掌握你的對象層次結構/角色/特徵等...?雖然我正在閱讀的例子 - 我明白
$cat->diets
:) - 但掌握新的東西 - 對我不利...
對不起,對文本的牆。我會很高興得到任何指向好書或任何什麼有什麼幫助...
+1爲做好準備工作,並希望我可以給第二個+1關心好的對象設計。 – DVK