Tôi là một lập trình viên perl trung bình. Tôi không có vấn đề với ngôn ngữ chính nó, nhưng với "tốt" thiết kế đối tượng. Mặc dù tôi có thể hiểu được (hầu hết) các mô-đun CPAN, không có vấn đề nghiêm trọng, tôi không thể tự thiết kế ngay cả hệ thống phân cấp đối tượng đơn giản.Thiết kế Perl/Moose OO, phân cấp gói
Ví dụ - bây giờ phải đối mặt với một ứng dụng thực sự đơn giản (web và giao diện dòng lệnh):
- học sinh đã xác nhận tải lên một zip-file (những gì chứa một công việc render)
- giải nén các tập tin đến và đi thư mục mới và kiểm tra nội dung của nó (nên chứa exatly một tập tin
commands.txt
) và zero hoặc hình ảnh hơn - nếu nội dung là OK - di chuyển thư mục đến nơi gọi là:
JobRepository
(một thư mục) - nếu người dùng quyết định chạy công việc hiển thị - gửi công việc từ số
JobRepository
của mình tới hàng đợi hiển thị toàn cầu (một lần nữa, một thư mục khác) - quy trình khác lấy công việc từ hàng đợi (fifo - được thiết kế với IPC::DirQueue) và thực hiện quy trình hiển thị
- khi hoàn tất, đưa kết quả vào những người sử dụng
JobRepository/result
thư mục - gửi email cho người dùng
- học sinh có thể tải về các kết quả nén
Trong bash
nó là doable với vài "không phức tạp kịch bản "bash - nhưng tôi muốn làm điều đó trong Perl (vì giao diện web) - và muốn thực hành Perlish (Moose) thiết kế đối tượng ...
Và đây bắt đầu vấn đề của tôi.
Đã cố gắng "trực quan" phương pháp phân tích danh từ và tạo hình ảnh tiếp theo.
văn hình ảnh, bởi vì nó là "ngắn" như:
package Iren::JobRepo;
use Moose;
use warnings;
has 'Jobs' => (is => 'rw', isa=>ArrayRef[Iren::Job]);
…
method AddJob {
...
}
, vv
Như bạn có thể thấy, nó thực sự rất đơn giản - nhưng immediatelly phải đối mặt với một số quyết định vấn đề, ví dụ:
- đối tượng nào nên thực hiện các phương thức unzip/zip/checkJob? Nó thuộc về: JobRepository ot công việc "zips" chính nó?
- đối tượng nào sẽ gửi email cho người dùng?
$user->send_email
- đến với tôi ngớ ngẩn, vì chúng tôi gửi email cho người dùng chứ không phải là người dùng cho chính mình ... - "ai" sẽ gửi công việc từ JobRepo của người dùng tới RenderQueue?
JobRepo->SendJobToRenderQueue
hoặc tôi nên gọi một số phương phápRenderQueue->addJob
? - những gì đối tượng nên nên sử dụng ISA
IPC::DirQueue
- (nên là implememtation của RenderQueue) - định nghĩa tròn. Người dùng có JobRepository, Kho lưu trữ có nhiều công việc, nhưng công việc có? một người dùng? (Cần biết để người mà thuộc công việc) - và vân vân ..
Như bạn thấy, không có vai trò, không có đặc điểm ở đây - không có gì - đó là đơn giản ... - nhưng đầy đủ các câu hỏi :(
Ai có thể giúp dọn dẹp đống lộn xộn này? Hệ thống phân cấp gói "tốt" là gì?
Vì vậy, tôi thực sự bị mất và tôi đã bắt đầu thất vọng về bản thân mình. nhưng tôi phải yêu cầu họ ...
- Làm thế nào để học thiết kế đối tượng tốt cho perl/Moose? (Tôi có thể sẽ không bao giờ sử dụng ngôn ngữ khác)
- tìm kiếm google về thiết kế đối tượng (và Stackoverflow quá) nhiều lần được trích dẫn là "Gand of Four" sách (và vài cuốn sách khác). Nhưng thường cho Java. Nó là giá trị để mua cho perl/Moose? Hoặc là ở đây một số cuốn sách tốt cho perl/Moose?
- là một số kỹ thuật tốt về cách kiểm tra thiết kế đối tượng phù hợp?
- trình tạo mã từ UML có thể không tồn tại đối với Moose - hoặc ở đây có thể sử dụng được và được phân phối lại?
- đơn giản - làm cách nào để bạn nắm vững phân cấp đối tượng/Vai trò/Đặc điểm, v.v ...? Trong khi tôi đang đọc các ví dụ - Tôi hiểu số
$cat->diets
:) - nhưng làm chủ được điều gì đó mới - không tốt cho tôi…
Xin lỗi vì tường văn bản. Tôi sẽ rất vui khi nhận được bất kỳ con trỏ nào đến cuốn sách hay bất cứ thứ gì giúp ích cho bạn ...
+1 để thực hiện công việc chuẩn bị tuyệt vời và muốn tôi có thể cung cấp +1 thứ hai để chăm sóc thiết kế đối tượng tốt. – DVK