2010-08-17 40 views
6

Tôi có hai cụm A & B.Tham chiếu vòng tròn giữa hai cụm .net

A có tham chiếu hiện tại với B và nó phải được giữ như vậy. Ngay bây giờ tôi đã thực hiện một số thay đổi đối với B cần tham khảo A. Vì vậy, tham chiếu vòng tròn xảy ra.

Bit chi tiết:

A có một vài lưới tài sản đó hộp thoại trong B cần phải được lưu trữ. Vì vậy, để tránh vấn đề tham chiếu vòng tròn này tôi đã cố gắng xác định giao diện cho lưới trong lắp ráp thứ ba mà A & B cả hai tham khảo, và làm cho B chỉ đề cập đến các giao diện.

Hai vấn đề mà tôi đang phải đối mặt:

  1. có quá nhiều kiểu dữ liệu tùy chỉnh (các thuộc tính được cụ thể) bên trong lưới được định nghĩa bên A và tôi phải xác định các giao diện cho mỗi một trong chúng.

  2. Tôi thấy ví dụ về tính năng này hoạt động với thông số chức năng, ví dụ: Hàm mục tiêu cuộc gọi thông qua giao diện thông qua vào Nhưng làm thế nào sẽ xem xét nó phù hợp với đoạn mã sau -. Tôi có thể không phải là mới một ICustomPropertyGridWrapper ...

    object = new CustomPropertyGridWrapper(...)
    m_property.SelectedObject = object;

+0

B ** có yêu cầu ** các lớp A hoặc A giống như trường hợp sử dụng mặc định của việc sử dụng các loại trong B không? Nếu chúng được kết hợp chặt chẽ, tôi không thấy lý do gì để giữ chúng trong các hội đồng riêng biệt. –

Trả lời

1

Đối với vấn đề 1, không có thực sự là một giải pháp khác sau đó hợp nhất hai dự án hoặc làm một số hệ mã

Đối với phần thứ hai, bạn có thể làm điều đó bằng cách thực hiện các mẫu thiết kế nhà máy.

0

Refactor mã của bạn hoặc hợp nhất hội = don' t sử dụng tham chiếu vòng tròn. Đó là triệu chứng của thiết kế rất xấu.

+2

Đánh giá khắc nghiệt của thiết kế, xem xét bạn biết hầu như không có gì về nó, và không có lời khuyên thực sự ... Tôi không nghĩ rằng bạn đang rất hữu ích. – Kobi

+0

Tôi không nhưng nếu bạn kiểm tra các câu trả lời khác, họ đang mô tả cùng một giải pháp - refactor hoặc merge. Vì vậy, nó là đủ hữu ích. –

+4

Và nó chỉ là một triệu chứng của một thiết kế xấu. Một thiết kế tốt có thể có các triệu chứng của thiết kế xấu, nếu có một lý do cho nó, nhưng một nhà thiết kế tốt vẫn sẽ chú ý đến những triệu chứng đó và đảm bảo chúng thực sự hợp lý, và chúng vẫn hợp lý khi mọi thứ thay đổi. –

3

Có vẻ như bạn đang cố gắng chết theo giao diện. Không phải mọi thứ đều phải được tiếp xúc bằng giao diện.

Câu trả lời đơn giản là hợp nhất các hội đồng hoặc di chuyển các loại điều khiển và kiểu dữ liệu chung đến một hội đồng thứ ba. Bạn chỉ cần giao tiếp mọi thứ nếu bạn muốn một cách hợp đồng nhất quán để truy cập hoặc làm việc với mọi thứ và bạn muốn ẩn thực hiện thực tế.

0

Nếu B bây giờ phụ thuộc vào bit của A có lẽ bạn nên cấu trúc lại những bit ra thành một hội đồng C mới mà sẽ được tham chiếu bởi cả A và B.

3

Đây là một vấn đề với các thiết kế ngôn ngữ C#. Trong C/C++ bạn sẽ chỉ sử dụng một tiêu đề để xác định giao diện của đơn vị biên dịch và sự phụ thuộc được giải quyết.

Trong C# không có tiêu đề. Bạn có ba tùy chọn

  1. 1> merge các hội đồng (tăng thời gian biên dịch và có thể không
    có ý nghĩa nếu các hội đồng có chức năng không liên quan). C# thường buộc bạn phải làm điều này, ngay cả khi các hội đồng nên hợp lý tách biệt.
  2. Tiêm phụ thuộc
  3. Tạo lắp ráp thứ ba với giao diện mà cả hai mô-đun tham chiếu.Điều này hoàn thành việc tiêm phụ thuộc thông qua một cơ chế ngôn ngữ C# (giao diện), thay vì cuộn của riêng bạn; nhưng cũng giống như vậy.

Số 3 thường là cách các tình huống này được xử lý trong C# nhưng nó không thanh lịch như giải pháp C/C++ cho vấn đề này. Đối với các cơ sở mã lớn, bạn phải thiết kế ngay từ đầu với ý nghĩ này.

+0

Tôi không thấy cách tiêm phụ thuộc có thể giúp ích ở đây. Bạn vẫn có hai hội đồng mà cả hai đều muốn tham chiếu với nhau. – Vaccano

+0

Con trỏ tốt trên giới hạn C# không có tệp tiêu đề. Nếu vậy, điều tương tự cũng áp dụng cho Java. Không rõ ràng DI có thể giúp đỡ như thế nào. Cần một minh họa. – liang

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