2009-02-09 34 views
9

Trong nhóm của tôi, chúng tôi có hàng trăm dll được chia sẻ, mà nhiều người cũng tham khảo các dll khác tự tham chiếu các dll khác, v.v. Chúng tôi đã bắt đầu sử dụng thư mục 'Chia sẻ' cho tất cả các dll mà chúng tôi cảm thấy là đủ chung để sử dụng trong các dự án khác, chẳng hạn như dll cơ sở dữ liệu.Cách tốt nhất để giải quyết các dll được chia sẻ trong C# là gì?

Vấn đề là nếu một trong các dlls tất cả các cách xuống cây được thay đổi, sau đó tất cả mọi thứ tham chiếu nó cần phải được biên dịch lại để tránh vấn đề versioning (xảy ra ở thời gian chạy).

Để tránh điều này, bây giờ nói về việc thêm tất cả các tệp 'chia sẻ' của chúng tôi vào một hội đồng lớn và bất kỳ ai tạo ứng dụng mới chỉ cần tham khảo điều đó và chỉ riêng điều đó.

Điều này rõ ràng sẽ ngày càng lớn hơn và tôi không chắc liệu đây có phải là cách tốt nhất hay không. Bất kỳ suy nghĩ xin vui lòng?

Trả lời

1

Đó chắc chắn không phải là cách tốt nhất để làm điều đó. Tôi có một vài "chia sẻ" DLL tại công việc của tôi mà là loại như thế. Họ khó sử dụng và khó khăn (đọc: không thể) để thực hiện những thay đổi có ý nghĩa bởi vì nó trở nên quá khó để đảm bảo rằng những thay đổi không phá vỡ ứng dụng ở hạ lưu, có vẻ như ngược lại với những gì bạn đang cố gắng làm.

Có vẻ như những gì bạn thực sự cần làm là tách biệt mối quan tâm của bạn tốt hơn một chút. Nếu tất cả các tệp DLL này tham chiếu lẫn nhau, chúng có thể được kết hợp chặt chẽ. Một DLL "được chia sẻ" thực sự có thể tự đứng vững, hoặc là một phần của gói ba hoặc bốn gói di chuyển như một nhóm. Nếu các phụ thuộc của bạn thực sự ngăn cản bạn thực hiện các thay đổi, thì chiến lược ghép nối của bạn đã bị sai lầm khủng khiếp.

Đặt mọi thứ trong một DLL lớn chắc chắn sẽ không làm gì tốt hơn. Trong thực tế, có lẽ ngược lại. Một khi bạn đã có tất cả mọi thứ trong một DLL, sự cám dỗ sẽ ở đó để ghép nối mọi thứ bên trong nó thậm chí chặt chẽ hơn với nhau, điều này sẽ làm cho nó không thể tách rời mọi thứ sau này.

3

Những gì chúng tôi làm là xử lý việc bảo trì các tệp DLL được chia sẻ dưới dạng một dự án trong chính nó, với sự kiểm soát nguồn của chính nó và mọi thứ. Sau đó, khoảng hai lần một năm, chúng tôi làm một 'phát hành' của các chia sẻ DLL cho công chúng, với số phiên bản của riêng mình và tất cả mọi thứ. Miễn là bạn luôn sử dụng các tệp DLL làm 'tập hợp' (nghĩa là tất cả các tệp DLL bạn tham chiếu từ cùng một bản phát hành), bạn được đảm bảo không có bất kỳ vấn đề phụ thuộc nào.

1

bạn có thể thực hiện một giải pháp bao gồm tất cả các dự án được kết nối.
và khi bạn cần để phát hành, chỉ cần xây dựng giải pháp này


Update.
Như bạn nói, giải pháp không thể chứa quá nhiều dll.
Mặt khác bạn có thể làm cho một bên ngoài MSBuild kịch bản hoặc sử dụng CruiseControl.NET rằng có khả năng để thực hiện các nhiệm vụ phức tạp như vậy.

+0

Điều đó sẽ làm việc, tuy nhiên sẽ có nghĩa là tải tất cả các dự án vào visual studio và tôi không nghĩ rằng nó sẽ rất nhạy sau quá nhiều dự án được bổ sung. Ngoài ra, nó có nghĩa là phải tự quản lý các dll được biên dịch cho từng dự án, ngay cả khi sử dụng một kịch bản sau xây dựng chẳng hạn. – HAdes

0

Để trích dẫn từ sách GoF, "Lập trình cho giao diện, không phải là triển khai". Điều này có thể áp dụng ở đây cho một số thư viện của bạn. Bạn đã biết làm thế nào giòn phát triển của bạn trở thành khi bạn có khớp nối chặt chẽ. Bây giờ những gì cần phải được giải quyết là làm thế nào để cung cấp cho bạn phòng thở.

  • Bạn có thể tạo giao diện. Điều này sẽ cung cấp một hợp đồng mà bất kỳ ứng dụng nào có thể sử dụng để chỉ định rằng một bộ chức năng tối thiểu có sẵn.

  • Bạn có thể tạo Dịch vụ triển khai giao diện. Điều này sẽ cho phép bạn cung cấp những gì sẽ được coi là một addon hoặc một plugin. Điều này cho phép bạn thiết kế theo một phiên bản hợp đồng với kỳ vọng rằng các công cụ của bạn sẽ tuân thủ.

  • Bạn có thể tạo Dịch vụ chỉ sử dụng giao diện. Điều này sẽ cho phép ứng dụng của bạn gửi bất kỳ triển khai cụ thể nào tuân thủ hợp đồng thiết kế.

Các sản phẩm như trình chỉnh sửa phát triển và trình duyệt web sử dụng một số mã có thể tái sử dụng có thể. Cảm ơn bạn. Ngày tốt.

Design Principles from Design Patterns

Plugin

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