2010-10-08 33 views
5

vấn đề của tôi là chúng tôi cố gắng sử dụng một khung công tác MVC (PHP). Sau khi thảo luận nhiều suy nghĩ rằng MVC rất tốt, nhưng tôi thiếu khả năng viết logic mô hình (ứng dụng) tái sử dụng được. Vì vậy, tôi không chắc liệu chúng ta có cách tiếp cận đúng để thực hiện phần mềm của chúng ta trong một khung MVC hay không.Làm thế nào để viết logic kinh doanh tái sử dụng trong các mô hình MVC?

Đầu tiên tôi sẽ mô tả cách tiếp cận không phải MVC, oo mà chúng tôi sử dụng tại thời điểm này.

Ví dụ - chúng tôi đang làm việc trên một số trò chơi trình duyệt (có đó là nghề của chúng tôi). Hãy tưởng tượng chúng ta có một đối tượng người chơi. Chúng tôi thường xuyên sử dụng đối tượng trình phát này. Chúng tôi có một số trang khác nhau nơi bạn có thể mua tư duy, vì vậy bạn cần phải thực hiện giao dịch "tiền" trên tài khoản ngân hàng của người chơi hoặc tưởng tượng bạn có thể chiến đấu chống lại người chơi khác. Chúng tôi có một số kịch bản chiến đấu, và các kịch bản này mất từ ​​2 đối tượng người chơi trở lên (nó phụ thuộc vào loại trận chiến tức là trận đấu clan, người chơi so với trận đấu người chơi ...).

Vì vậy, chúng tôi có một số trang (và bộ điều khiển) với logic chiến đấu khác nhau. Nhưng mỗi bộ điều khiển này sử dụng đối tượng người chơi để tính toán tất cả các thuộc tính và vật phẩm mà người chơi có và sát thương và phòng thủ mà người chơi sẽ làm.

vì vậy, làm cách nào chúng tôi có thể sử dụng lại logic trong đối tượng trình phát trong trường hợp Mô hình MVC? nó sẽ là xấu để sao chép tất cả các logic cần thiết trong các cuộc chiến-điều khiển và mô hình khác nhau.

Tôi nghĩ rằng "giao dịch vàng" -logic sẽ là một ví dụ tốt để cung cấp cho bạn một số thông tin chi tiết hơn. bạn cần chức năng giao dịch trong trường hợp chiến đấu, nếu bạn thắng một người chơi khác và cướp một số vàng của mình, bạn cần chức năng giao dịch trong trường hợp mua một số thứ và bạn cần chức năng giao dịch trong trường hợp chi tiêu vàng đến guild của người chơi ...

Vì vậy, tôi sẽ nói đó sẽ là một cách tiếp cận xấu để xác định tất cả các chức năng này trong một mô hình trình phát! Tôi có thể nói rằng các mô hình trình phát này sẽ rất lớn (thực ra chúng tôi có vấn đề là lớp cầu thủ của chúng tôi thực sự rất lớn - đó là lớp thần)

Bạn có nghĩ giải pháp kiểu MVC cho vấn đề này không?

Trả lời

1

Tôi sẽ nói bạn đặt mã ở vị trí phù hợp nhất và bạn sẽ không cần phải sao chép nó ở đâu đó khác.

Nếu có một số thao tác luôn cần đối tượng Trình phát, nhưng có thể được sử dụng trên các Bộ điều khiển khác nhau, lớp Người chơi sẽ là nơi hợp lý để đặt nó. Mặt khác, nếu một chút logic chỉ cần được thực hiện trong ngữ cảnh của một bộ điều khiển nào đó, và liên quan đến các lớp khác có khả năng, nó có lẽ phải ở trong bộ điều khiển - hoặc có lẽ trong một số lớp khác nữa.

Nếu bạn gặp khó khăn trong việc tìm ra nơi logic nên đi, có lẽ đó là vì các chức năng của bạn không đủ chi tiết và có thể sử dụng lại được. Chắc chắn có những khía cạnh của MVC buộc bạn phải suy nghĩ thêm một chút về sự tách biệt các mối quan tâm và giữ mọi thứ KHÔN PHỤC hơn là một cách tiếp cận "đơn giản" OOP ... vì vậy bạn có thể sẽ phá vỡ các hoạt động được mã hóa hiện tại. chức năng bây giờ thành nhiều chức năng trên các lớp khác nhau để có được mã đúng ở đúng nơi. Ví dụ - và đây không phải là tất cả các đề xuất cụ thể, nhưng chỉ là một quá trình suy nghĩ ngẫu nhiên có thể - có thể quá trình chuyển 'vàng' giữa các người chơi cần được chia thành các quy trình chi tiết hơn. Lớp người chơi có thể thực hiện nhiệm vụ cơ bản là thay đổi số dư, nhưng sau đó (các) bộ điều khiển có thể thực hiện các phần cụ thể của quy trình, chẳng hạn như xác minh/từ người nào đang được chuyển vàng và tại sao.

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