2011-09-06 28 views
8

Đối với gói ứng dụng của tôi, tôi sẽ cần một số lớp không phải là bộ điều khiển cũng như các mô hình. Ví dụ, tôi muốn có một lớp học scorecard có các thành viên như "kỹ năng", "hiệu quả", "làm đẹp", v.v. Ngoài ra, nó có thể có phương pháp thành viên/getters như "meanScore".Tôi đặt các lớp nào trong Symfony không phải là bộ điều khiển hay mô hình?

Trường hợp một lớp học như vậy sẽ nằm trong khung công tác của Symfony ở đâu?

Trả lời

8

Tôi đồng ý với @Gordon rằng điều này nghe giống như một đối tượng kinh doanh. Nhưng nếu bạn chắc chắn rằng nó không phải là, bước tiếp theo của bạn là để tìm ra cách bạn sẽ phân loại nó. Nó là một người trợ giúp? Một người nghe sự kiện? Một lớp tiện ích? Khi bạn tìm ra điều đó, hãy tự hỏi: liệu nó có phù hợp với một gói hay bạn sẽ sử dụng lại nó giữa các dự án?

Giả sử bạn quyết định đó là trình xử lý sự kiện và thuộc về nhóm. Đặt nó trong MyBundle/EventListener. Nếu đó là người trợ giúp, hãy đặt nó trong MyBundle/Helper. Bây giờ nếu bạn có kế hoạch tái sử dụng nó amonst dự án (mà trong trường hợp này nó thực sự không có âm thanh như nó, nhưng chịu với tôi ...) bạn có thể tốt hơn off tạo ra một nơi trong vendor cho nó.

Điều quan trọng cần nhớ là vì Symfony2 còn quá trẻ, thực sự không có danh sách thực hành tốt nhất để trả lời các câu hỏi như thế này. Ngay bây giờ nó là loại của chúng tôi để xem những gì làm việc, và những gì không. Nó giống như phía tây hoang dã :)

2

Vì lớp này dường như đại diện cho đối tượng kinh doanh từ Miền của bạn, nên nó thuộc về Mô hình.

+0

Còn trong trường hợp không phải là đối tượng kinh doanh. Nói rằng tôi có lớp 'breadcrumb', với hai tên 'thành viên' và 'href'? –

+0

@Robert Tôi không biết Symfony và Twig sẽ đặt ở đâu. Tôi vẫn đặt nó vào mô hình, mặc dù không phải bên trong lớp Domain, nhưng lớp ứng dụng chung vì nó là một phần của giao diện người dùng. Hoặc, nếu nó có thể tái sử dụng, tôi sẽ đặt nó vào một số loại thư mục framework/lib – Gordon

3

Cách tôi trả lời các loại câu hỏi này cho bản thân mình là tôi đi đến KnpBundles và kiểm tra xem các nhà phát triển khác đang làm như thế nào.

Một điều cần lưu ý là Symfony2 là tất cả về tự do lựa chọn khi nói đến cấu hình. Bạn có thể gắn tất cả mọi thứ trong thư mục Random cho tất cả các hạt nhân của Symfony2, miễn là bạn thiết lập chính xác. Vâng, đó có thể là một chút, nhưng ví dụ: Listener hoặc EventListener - không có sự khác biệt.

Bây giờ, nếu bạn muốn hỏi tôi, tôi muốn nói rằng cho Scorecard - tùy thuộc vào nơi bạn đang đi để sử dụng nó, hoặc là Service hoặc Helper/Util

Về breadcrumb - có vẻ như một ví dụ điển hình cho một phần mở rộng cành.

+0

Tôi không nghĩ đó là một Dịch vụ. Các dịch vụ thường thực hiện các phép tính bằng cách gọi API công khai của các đối tượng Domain. Họ hiếm khi đóng gói trạng thái của chính họ ("kỹ năng", "hiệu quả", "làm đẹp"). Chúng giống như một lớp trung gian mỏng giữa một lớp bên ngoài như UI và lớp Domain. – Gordon

Các vấn đề liên quan