2010-01-12 29 views
20

Tôi có 2 dự án.Phụ thuộc thông tư

Dự án # 2 có một tham chiếu đến Dự án # 1

Bây giờ tôi cần phải tham khảo dự án # 2 trong dự án # 1, nhưng vs.net được phàn nàn về một phụ thuộc vòng tròn.

Có cách nào không?

+2

Ít nhất chúng tôi đều đồng ý với câu trả lời của chúng tôi .. ;-). +1 cho tất cả mọi người – David

Trả lời

52

Tuyệt đối không. Phụ thuộc thông tư là một dấu hiệu của thiết kế xấu. Tôi không có nghĩa là phải khắc nghiệt. Có một số cách để giải quyết vấn đề này.

1) Bạn có thể cấu trúc mã chung cho dự án khác, nói Dự án # 0

2) Bạn có thể sửa thiết kế của bạn, mà có lẽ là con đường để đi.

Bác Bob có một bài viết hay về Nguyên tắc đóng gói bao gồm Nguyên tắc phụ thuộc tuần hoàn. http://www.objectmentor.com/resources/articles/granularity.pdf. Đọc điều này để biết tại sao phụ thuộc theo chu kỳ là một điều xấu.

+1

Một sửa chữa phổ biến là phụ thuộc vào trừu tượng như giao diện chứ không phải là trường hợp cụ thể, và để di chuyển những abstractions đến một hội đồng khác. Nhưng, thực sự, suy nghĩ về cấu trúc dự án của bạn và những gì thực sự thuộc về nơi. – kyoryu

+0

+1 cho bài viết được liên kết. Tôi chia gói "Logger" của tôi bao gồm một tập các lớp "Application usage log" và một lớp "error logging" thành hai gói riêng biệt (Hầu hết các gói không cần phải đăng nhập sử dụng ứng dụng!), Sau đó liên kết với WS quay trở lại bản gốc. Quay lại DAG. Nên được yêu cầu đọc cho tất cả. – DFTR

+0

@kyoryu Bạn đang nói về Nguyên tắc Inversion phụ thuộc (DIP), ông đề cập đến trong bài viết? - Tôi đồng ý, bạn có lẽ nên cố gắng tìm ra TẠI SAO khả năng phụ thuộc vòng tròn tồn tại, và có lẽ thay đổi các yếu tố của thiết kế (nếu bạn có thể) trước khi phụ thuộc vào trừu tượng. – DFTR

5

Hợp nhất hai thành một hoặc thiết kế lại.

4

Không. Cấu trúc dự án của bạn đúng cách. Hãy thử sử dụng một số loại đặt hàng dựa trên trừu tượng - từ cấp thấp đến cao cấp.

5

Điều này cho thấy sự cố trong thiết kế của bạn. Nếu có nhu cầu chính xác cho hai hoặc nhiều loại của bạn được nhận thức lẫn nhau thì chúng sẽ tồn tại trong cùng một hội đồng.

+0

Và nếu họ cần phải ở các ngôn ngữ khác nhau? – Joshua

+0

Bạn có thể đưa ra một ví dụ không? –

+0

[Ví dụ lỗi thời:] Trong VS 2008, chỉ VB .NET mới có thể sử dụng bộ lọc ngoại lệ, trong khi chỉ C# mới có thể sử dụng biểu thức LINQ. Nó không phải là quá khó để tưởng tượng một trường hợp mà chúng xuất hiện trong các thiết lập xung đột. – Joshua

10

Tái cấu trúc dự án của bạn để đưa các thành phần chung vào "Dự án # 0", cả tham chiếu Project # 1 và Project # 2.

2

tôi thực sự không có nghĩa là trở thành một smart-aleck, nhưng thiết kế chương trình tốt hơn là câu trả lời.

3

Phụ thuộc vòng tròn có nghĩa là chúng không còn là hai dự án độc lập nữa (vì không thể xây dựng chỉ một trong số chúng).

Bạn cần phải hoặc là trình tái cấu trúc để bạn chỉ có một phụ thuộc một chiều hoặc bạn nên hợp nhất chúng vào một dự án duy nhất.

3

Thông tư tham khảo thể được thực hiện như đã thấy trong một previous question, nhưng bạn không nên làm điều đó vì những lý do tất cả mọi người đã nêu ra ở đây.

1

Điều này có vẻ là một lỗi thiết kế, không có gì khác. Tái thiết kế là giải pháp.

-4

Tôi không nghĩ rằng đó là một giải pháp tốt nhưng chúng ta vẫn có thể làm được bằng cách làm theo các bước sau

  • thêm tài liệu tham khảo
  • duyệt và
  • đi vào Debug thư mục của dự án dll,
  • tìm .dll và Thêm.
+2

không làm điều đó! Thực hiện theo những gì được chỉ ra trong câu trả lời được chấp nhận! –

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