2010-03-01 25 views
5

Chúng tôi có khá nhiều mã tái sử dụng tại nơi làm việc (một điều tốt). Bất cứ khi nào tôi tạo ra một dự án mới sử dụng chúng tôi đã sử dụng để bao gồm các dự án của họ như là một phần của giải pháp của tôi, và tôi đã tự hỏi nếu tôi thay vì tái sử dụng chúng như là dll xuất bản thay thế. Lý do (hoặc lý do) tôi bao gồm dự án là nếu tôi tìm thấy một lỗi trong một trong số họ, tôi có thể chi nhánh và sửa chữa ngay tại đó. Nhưng có vẻ như tôi đang tập trung vào dự án trong tầm tay.Trong thư viện có thể sử dụng lại trong nhà - sử dụng lại dưới dạng dll hoặc làm dự án?

(Không chắc chắn nếu điều này nên được CW từ chỉ có hai câu trả lời và tôi sẽ quan tâm đến tìm hiểu về sở thích của bạn)

Trả lời

4

Có một vài điều cần xem xét ở đây.

  • Thư viện đó thêm bao nhiêu thời gian để biên dịch và bạn có quan tâm không?
  • Tần suất bạn cần sửa lỗi trong đó?

Tôi sử dụng thư viện được biên dịch trước cho bất kỳ mã nào không thay đổi trong tháng. Nếu tôi cần phải thay đổi một số mã hơn một lần một tháng trong một gói thì gói đó không được biên dịch trước.

Tôi thích biên dịch trước để tăng tốc độ biên dịch chương trình chính. Nhưng tôi luôn luôn bao gồm các biểu tượng gỡ lỗi trong biên dịch trước vì vậy nếu một lỗi xảy ra tôi có thể bước qua lắp ráp biên dịch trước cũng dễ dàng như phần còn lại.

+0

Điểm tốt về các biểu tượng - và bạn chính xác về tốc độ, tôi có một vài dự án mất một lúc để tải và biên dịch. –

3

Đó thực sự phụ thuộc nếu bạn đang tham gia nhóm chịu trách nhiệm đối với họ hay không nếu bạn là trong nhóm thêm chúng vào nguồn của bạn và sửa chúng khi bạn đi. Nếu bạn không thuộc nhóm đó sử dụng chúng như là một khách hàng và các khuyết tật tập tin khi bạn tìm thấy chúng nếu không bạn có thể chịu trách nhiệm về mã bên ngoài phạm vi công việc của bạn. Nếu bạn đang ở trong một môi trường linh hoạt mà có thể không quan trọng nhưng đối với tôi nó có thể là một vấn đề cho tất cả của một bất ngờ là chủ sở hữu của một sự thay đổi mã tôi không có nói qua.

+0

Cảm ơn - nhưng điều đó sẽ không đi ngược lại ý tưởng "quyền sở hữu mã tập thể"? –

+1

Có. Nhưng tôi chưa bao giờ có kinh nghiệm như tôi đã nói nếu bạn làm việc trong một môi trường linh hoạt sửa chữa nó. Tôi làm việc ở nơi nếu bạn sửa chữa một vấn đề khác, bạn chỉ cần tạo ra một vấn đề cho bản thân và một cuộc chiến truf để bạn phải đánh giá nhận xét của tôi về con mắt của người bị đốt cháy. – rerun

+0

Điểm hợp lệ, được thực hiện. Cảm ơn! –

2

Một xem xét cho điều này chỉ là cách các thư viện được cho biết thường xuyên được sử dụng lại. Nếu họ có xu hướng được sử dụng trên các dự án hoàn toàn khác nhau, bạn phải cẩn thận không vẽ mình vào một góc, nơi bạn phát hiện ra những thay đổi bạn đã thực hiện ba tuần trước để thư viện hỗ trợ một số ứng dụng mới hóa ra là phá vỡ thay đổi một vài ứng dụng khác.

Về cơ bản những gì tôi đang nói là bạn không muốn phải chống lại sự cám dỗ để thực hiện thay đổi đối với thư viện có nhiều mây; tốt hơn là đừng đặt sự cám dỗ đó trước mặt bạn ngay từ đầu. Nếu thư viện được thiết kế để sử dụng lại, bất kỳ thay đổi quan trọng nào cần được thiết kế và triển khai rất cẩn thận và được kiểm tra kỹ lưỡng đối với tất cả thư viện/ứng dụng phụ thuộc. Nó trở nên khó khăn hơn nhiều để có một cách tiếp cận kỷ luật khi bạn nghĩa đen có nguồn ngay trước mặt bạn, chờ đợi để được sửa đổi.

Cách tiếp cận của tôi là tạo các giải pháp của các thư viện liên quan; ví dụ, tôi có thể có một assembly cho các giao diện cốt lõi và các lớp trừu tượng, một vài assembly khác cho các triển khai cụ thể khác nhau, một assembly khác cho các bài kiểm thử đơn vị, v.v. Nếu có các lớp thư viện tái sử dụng phụ thuộc thì chúng thường sẽ được gộp vào cùng một giải pháp.

Nhưng nó dừng ở cấp ứng dụng. Bất kỳ dự án nào không phải là luôn luôn sẽ được triển khai với các thư viện chính không chia sẻ giải pháp, nó chỉ đơn giản là tham chiếu đến DLL được biên dịch. Nó buộc tôi phải bị kỷ luật về những thay đổi của thư viện và không bắt đầu tinh chỉnh nó để hỗ trợ một số chức năng giao diện người dùng cụ thể.

Tôi không biết đây có phải là phương pháp "đúng" hay không, nhưng tôi đã bị cắn trước khi thực hiện thay đổi sớm đối với thư viện mà không kiểm tra chính xác phụ thuộc và luôn là kết quả của việc tập trung vào một ứng dụng không suy nghĩ về tác dụng phụ. Việc tôi thực hiện điều này là khi bạn làm việc trên thư viện, bạn cần tập trung vào thư viện chính nó chứ không phải cách nó được sử dụng trong một kịch bản cụ thể.

+0

Điểm tốt, và nó khiến tôi nghĩ rằng cuối cùng tôi có thể xem các thư viện một cách quan trọng hơn với tư cách là người tiêu dùng nhưng cũng buộc tôi phải tìm cách sử dụng chúng khi chúng được thiết kế; nếu họ không cung cấp chức năng cần thiết hoặc nếu họ có lỗi thì thay đổi có thể theo thứ tự. –

+0

+1 để đề cập đến việc giới thiệu các thay đổi đột phá trong thư viện của bạn. – Steven

1

Đối với trường hợp thư viện được tái sử dụng bởi nhiều giải pháp độc lập hoặc khi thư viện được quản lý bởi một nhóm khác so với nhóm sử dụng nó, tôi nghĩ quy tắc quan trọng nhất cần lưu ý là phiên bản cụ thể của giải pháp thông thường nên liên quan đến phiên bản cụ thể của thư viện đó.

Hãy tự hỏi mình những điều sau đây: Tôi sẽ nhận được phiên bản thư viện nào khi tôi kiểm tra mã nguồn của giải pháp từ sáu tháng trước? Nếu câu trả lời là: “Luôn là phiên bản mới nhất của thư viện”, điều này có thể có vấn đề.

Tôi đã làm việc trên một dự án nơi các nhà phát triển tự động xuất bản các phiên bản dll mới của họ trên mạng cục bộ. Giải pháp chúng tôi đã làm việc trên chỉ tham chiếu các dll từ vị trí cụ thể đó. Vấn đề với điều này là chúng tôi không bao giờ biết phiên bản thư viện nào mà chúng tôi biên soạn và nhiều lần, sau khi thử nghiệm, chúng tôi đã phát hành phiên bản ứng dụng đã bị hỏng vì đột nhiên phiên bản mới của thư viện đó đã được phát hành (chúng tôi đã không 't kiểm tra).

Nhưng sẽ càng rõ ràng hơn khi bạn đang phát triển phiên bản 2 của ứng dụng, nhưng vẫn phải duy trì phiên bản đã phát hành 1 của ứng dụng của bạn. Bạn muốn phát hành bản vá lỗi của phiên bản 1 với cùng một phiên bản thư viện ban đầu nó được phát hành (khi lỗi không có trong thư viện đó) bởi vì nếu không bạn sẽ phải kiểm tra lại toàn bộ ứng dụng một lần nữa.

Bởi vì điều này tôi thường thêm tất cả các thư viện tôi sử dụng (không có trong GAC theo mặc định) như một phần của giải pháp của tôi và kiểm tra chúng vào kiểm soát nguồn. Bằng cách này, tôi có toàn quyền kiểm soát các phiên bản mà giải pháp sử dụng tại bất kỳ thời điểm cụ thể nào.

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