Helpex - Trao đổi & giúp đỡ Đăng nhập
4

Vì vậy, tôi đã có một giải pháp chứa một vài dự án lớn, mà tôi đang cố gắng chia nhỏ thành các dự án nhỏ hơn với những trách nhiệm riêng biệt hơn. Đây là một trò chơi, nhưng tôi chủ yếu là một nhà phát triển LOB và tôi nghĩ rằng các nguyên tắc có thể phổ biến, và tôi nghĩ tôi có thể học được điều gì đó ở đây.

Sự phụ thuộc trong một số đối tượng hơi quá chặt chẽ với nhau và tôi hy vọng sẽ được giúp đỡ về cách gỡ rối chúng. Hoặc có thể là một số kiểu mẫu hoặc trừu tượng có thể khiến chúng dễ quản lý hơn.

Ares.Core.World có các lớp trong đó như Sinh vật, Vật phẩm, v.v. Tất cả chúng đều kế thừa từ Thực thể, nó nhận biết được ô nào trên bản đồ mà nó tồn tại. Nó hoàn thành điều này bằng cách giữ một tham chiếu đến Ares.Core.UI.MapControls.MapCell ... Và bạn có thể thấy rằng các dây đã bị bắt chéo.

Ares.Core.UI.MapControls chứa Bản đồ và MapCell, mỗi bản đồ đều chứa Danh sách các sinh vật và vật phẩm mà chúng chứa. MapCell cũng kế thừa từ Ares.Core.World.Entity vì nó đã giải quyết một số vấn đề ban đầu một cách rất thanh lịch - ví dụ: tất cả các Đối tượng đều có khoảng không quảng cáo.

Tôi muốn tìm cách tách giao diện người dùng và Thế giới thành các dự án riêng biệt ( Ares.WorldAres.UI ) vì giao diện người dùng và thế giới bao quát có thể là mối quan tâm riêng biệt. Nhưng như bạn có thể thấy, hiện tại hai dự án sẽ cần phải tham chiếu lẫn nhau và các tham chiếu vòng tròn không được phép.

Tôi tự hỏi liệu có bất kỳ mẫu kiến ​​trúc nào có thể giúp ích trong tình huống này. Cảm ơn!

4 hữu ích 3 bình luận 890 xem chia sẻ
2

Vì vậy, các lớp học trên Thế giới của bạn - Sinh vật, Vật phẩm, v.v. - tất cả chúng đều cần thứ gì đó từ MapCell.

Bạn có thể tạo một cách hợp lý một (hoặc một số) giao diện đại diện cho những gì các Thực thể Thế giới cần không? Vì vậy, các thực thể chỉ cần một triển khai của giao diện đó?

Đây sẽ là bước đầu tiên để tách hai người ra. Có lẽ rõ ràng, không có chữ ký phương thức hoặc thuộc tính nào của giao diện này có thể bao gồm các lớp từ dự án giao diện người dùng. Nó phải được xác định với các kiểu tiêu chuẩn hoặc kiểu tùy chỉnh trong thư viện cả World và UI tham chiếu (ví dụ: Ares.Core).

Sau đó, trong dự án giao diện người dùng, xác định các triển khai của (các) giao diện đóng gói MapCell và cung cấp những gì cần thiết cho các Thực thể Thế giới.

Sử dụng IoC mà bạn lựa chọn để cung cấp việc triển khai ở những nơi cần thiết, tùy thuộc vào cách bạn lấy MapCell, bạn cũng có thể cần phải phân lớp trên Factory.

Nếu không có thêm chi tiết về nhu cầu cụ thể của bạn thì thật khó để cụ thể hóa, nhưng tôi nghĩ rằng cách tiếp cận này nói chung sẽ khả thi.

2 hữu ích 2 bình luận chia sẻ
1

Không có gì sai khi có các lớp trong các không gian tên khác nhau tương tác ở cấp độ chi tiết tốt. Việc tách các mối quan tâm có thể được thực hiện ở cấp độ bảo vệ của người truy cập (công khai, được bảo vệ, riêng tư, v.v.). Bạn có thể chia nhỏ dự án của mình thành các tiểu dự án về mặt logic hoặc cấu trúc, áp dụng bất kỳ ràng buộc tổ chức bổ sung nào mà bạn cho là có liên quan.

Một số chiến lược có thể là:

  • Logic phân tách có cấu trúc, trong đó mỗi silo cư trú trong các không gian tên đã thiết lập của riêng chúng và chỉ tương tác thông qua các giao diện cấp cao.
  • Phân tách logic, trong đó một tập hợp (hoặc tập hợp các asms) trở thành một dự án logic có thể kéo dài nhiều không gian tên. Tương tác có thể được thực hiện thông qua các giao diện, nhưng cũng thông qua việc xem xét kỹ lưỡng quyền truy cập của thành viên.

Để gỡ rối chúng, hãy cố gắng nhìn dự án từ các góc độ khác nhau. Những gì có thể trông giống như một mớ hỗn độn từ một POV thực sự có thể trông thanh lịch từ một POV khác. Nếu bạn thấy thực sự có một logic hợp lý đằng sau cấu trúc lớp của chúng, có lẽ tất cả những gì cần thiết là bắt đầu tách các bit và mảnh thành các tập hợp khác nhau, chỉ với những chỉnh sửa nhỏ đối với không gian tên. Nếu bạn thấy nó thực sự là hỗn loạn, tốt, công việc của bạn được cắt ra cho bạn :-D

1 hữu ích 0 bình luận chia sẻ
0
  1. Thiết kế Split and Conquer gợi ý rằng bạn nên tách giao diện người dùng và thành phần cốt lõi.
  2. Logic trò chơi của bạn phải là một phần của mô-đun cốt lõi thay vì giao diện người dùng.
  3. Giao diện người dùng phải có giao diện đồ họa và giao diện hành động hoặc giao diện hành vi đối tượng và được thực hiện bởi mô-đun lõi.
0 hữu ích 3 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# vb.net design-patterns architecture , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading