Tôi đã suy nghĩ điều này trong nhiều ngày và tôi vẫn không biết phải làm gì. Tôi đang cố gắng cấu trúc lại một hệ thống chiến đấu trong PHP (... xin lỗi.) Đây là những gì tồn tại cho đến nay:
- Có hai loại (cho đến nay) các thực thể có thể tham gia chiến đấu. Hãy gọi họ là người chơi và NPC. Dữ liệu của họ đã được viết khá tốt.
- Khi tham gia chiến đấu, những thực thể này được bao bọc bởi một đối tượng khác trong DB được gọi là a
Combatant
, cung cấp cho họ thông tin về cuộc chiến cụ thể. Họ có thể tham gia vào nhiều chiến đấu cùng một lúc. - Tôi đang cố gắng viết công cụ logic để chiến đấu bằng cách cho các chiến binh vào đó.
- Tôi muốn có thể chế giễu mọi thứ để thử nghiệm.
Để phân tách logic và dữ liệu, tôi muốn có hai lớp giao diện / lớp cơ sở, một lớp ICombatantData
và lớp kia ICombatantLogic
. Hai người triển khai dữ liệu sẽ là một cho các đối tượng thực được lưu trữ trong cơ sở dữ liệu và một cho các đối tượng giả của tôi.
Bây giờ tôi đang gặp phải những điều không chắc chắn với việc thiết kế khía cạnh logic của mọi thứ. Tôi có thể có một người triển khai cho mỗi người chơi và NPC, nhưng sau đó tôi gặp sự cố. Một chiến binh cần có khả năng trả lại thực thể mà nó bọc lại. Phương pháp getter này nên là một phần của logic hoặc dữ liệu? Tôi cảm thấy mạnh mẽ rằng nó nên có trong dữ liệu, bởi vì phần logic được sử dụng để thực hiện chiến đấu, và sẽ không có sẵn nếu ai đó chỉ tìm kiếm thông tin về một cuộc chiến sắp tới. Nhưng các lớp dữ liệu chỉ tách biệt giả khỏi DB, không phải trình phát từ NPC. Nếu tôi thử có hai lớp con của trình triển khai dữ liệu DB, một lớp cho mỗi loại thực thể, thì làm cách nào để kiến trúc sư đó trong khi giữ các mô phỏng của tôi trong vòng lặp? Tôi có cần một số giao diện thứ ba như thế IEntityProvider
mà tôi tiêm vào các lớp dữ liệu không?
Ngoài ra với một số ý tưởng tôi đã xem xét, tôi cảm thấy mình sẽ phải kiểm tra để đảm bảo rằng bạn không khớp mọi thứ, như tạo logic cho NPC vô tình bọc dữ liệu cho người chơi. Điều đó có ý nghĩa gì? Đó có phải là một tình huống thậm chí có thể xảy ra nếu kiến trúc là chính xác, hoặc thiết kế phù hợp sẽ cấm hoàn toàn điều đó vì vậy tôi không cần phải kiểm tra nó?
Nếu ai đó có thể giúp tôi chỉ cần bố trí một sơ đồ lớp hoặc một cái gì đó cho việc này, nó sẽ giúp tôi rất nhiều. Cảm ơn.
biên tập
Cũng hữu ích cần lưu ý, lớp dữ liệu giả không thực sự cần Entity
, vì tôi sẽ chỉ định trực tiếp tất cả các tham số như chỉ số chiến đấu. Vì vậy, có thể điều đó sẽ ảnh hưởng đến thiết kế chính xác.
Combatant.entity
không được sử dụng trong chiến đấu và do đó không nên tồn tại. Có lẽ bạn cần một lớp khác giống nhưEntityVsEntityCombat
kết thúc logic chiến đấu, chứaEntity <--> Combatant
ánh xạ và cập nhậtEntity
trạng thái sau khi chiến đấu kết thúc? Có lẽ một số thông tin thêm về kiến trúc hiện tại của bạn có thể giúp đỡ.