2010-12-28 29 views
8

Tôi có hai dự án lớp học trong một giải pháp Visual Studio. Do tính chất của dự án thứ hai cả hai dự án tham chiếu lẫn nhau bởi vì họ cần các dịch vụ của nhau (nghĩ về cụm từ "Tôi gãi lưng, bạn cào").Giải quyết sự suy giảm thông tư

Visual Studio (2010) sẽ không cho phép tôi thêm tham chiếu vào dự án b từ dự án a, vì dự án đã là dự án đã tham chiếu b.

Có những chiến lược nào để giải quyết sự phụ thuộc vòng tròn này?

Cảm ơn

Trả lời

8

Có hai cách tiếp cận điển hình bạn có thể sử dụng:

1) Kết hợp cả hai dự án vào một dự án.

alt text

2) Tìm những phần chung của hai dự án và yếu tố chúng ra thành một dự án thứ ba riêng biệt.

alt text

+0

điểm 2 được định hướng OOP nhiều hơn. –

2

Không có gì khác ngoài "phải phá vỡ". Hoặc là tách hai hoặc kết hợp chúng thành một mô-đun duy nhất.

4

Refactor các dịch vụ độc lập (những người không phụ thuộc vào các dự án khác) vào một thư viện hạng ba và có cả các dự án tham khảo một phần ba này.

Mặt khác, nếu hai dự án được kết hợp chặt chẽ, thì bạn cũng nên xem xét kết hợp chúng vào một dự án duy nhất.

1

Một dự án có thể trưng ra các giao diện mà dự án khác triển khai và sau đó nó không còn cần tham chiếu đến dự án khác.

0

Chúng tôi đã có một tình huống tương tự, trong đó chúng ta cần phải gọi lớp dbCon để nhận chuỗi dbConnection từ dự án a đến dự án b. Chúng tôi đã giải quyết nó bằng cách lưu trữ nó trong bảng dbconfig trong cơ sở dữ liệu và chuyển nó như một tham số cho dự án b.

0

Có lẽ giải pháp đúng là phá vỡ một phần của "dự án a" và "dự án b" thành "dự án c". Sau đó A và B đều phụ thuộc vào C, và không phụ thuộc vào cái kia. Không có cách nào để có một phụ thuộc vòng tròn thực, bên ngoài một số quá trình xây dựng gia tăng mà bạn xây dựng A.dll chứa mọi thứ B.dll cần nhưng không có gì mà B.dll cần, sau đó thay thế nó bằng một cái mới đã được xây dựng bằng cách sử dụng B.dll mới xây dựng và chứa những thứ phụ thuộc vào nó. Cuối cùng, một chiến lược phức tạp như vậy chắc chắn sẽ không xứng đáng. Có thể cũng có thể xây dựng netmodules và sau đó kết hợp chúng lại với nhau thành một assembly bằng cách sử dụng Assembly Linker, nhưng một lần nữa, kết quả sẽ không biện minh cho nỗ lực liên quan.

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