Thực sự không có gì sai khi làm điều đó miễn là mọi người đều có thể kiểm soát được chi phí, lợi ích và rủi ro.
... cách khắc phục có vẻ đơn giản ... để tự vá mã
Khi bạn có một công việc phải làm, hoàn hảo (có thư viện của bên thứ ba chính xác là những gì bạn muốn) là kẻ thù đủ tốt (tự vá nó), và đôi khi bạn phải làm những việc như vậy. Tôi đã thực hiện một số dự án mà chúng tôi đã mua giấy phép nguồn cho các thư viện thương mại để chúng tôi có thể khắc phục sự cố trước khi nhà cung cấp nhận được.
... Những kẻ gièm pha muốn tranh luận rằng đây gần như luôn là một ý tưởng tồi trong đó là rủi ro và gây ra một sự phức tạp rắc rối.
Đó là một ý tưởng tồi nếu bạn không có các bộ xử lý để phân tích mã của người khác, xác định một vấn đề và viết một bản sửa lỗi. Điều đó đúng cho dù mã trong nhà hay bên thứ ba; sự khác biệt duy nhất là liệu nó có bị ném qua một hình khối hoặc bức tường tòa nhà trước khi nó rơi vào lòng bạn hay không.
Nếu những kẻ gièm pha của bạn chỉ đơn giản là gạt ý tưởng sang một bên mà không cân nhắc chi phí khi không thực hiện bản vá này, thì họ đã không làm bài tập về nhà. Nếu bạn có nhiều mã nội bộ bị ảnh hưởng bởi lỗi mà bản vá của bạn sẽ sửa, bạn sẽ phải trải qua và thay đổi nó để xử lý xung quanh nó và kiểm tra lại mọi thứ để chắc chắn rằng nó hoạt động chính xác. Sau đó, nếu bạn từng nâng cấp gói lên phiên bản sửa lỗi, bạn có thể phải tìm và xóa các cách khắc phục của mình và kiểm tra lại. Cũng có những rủi ro khi làm điều đó, như bỏ lỡ một trường hợp bạn đã thay đổi hoặc không đủ kiểm tra. Cá nhân, nếu tôi có cơ hội sửa một lỗi tại nguồn của nó, tôi thà làm điều đó hơn là đuổi theo phần còn lại của mã bằng một cái flyswatter và hy vọng tôi có được mọi thứ.
... thay đổi mã được thực hiện bởi chúng tôi ... nó phải là một phần của cơ sở mã của chúng tôi ... chúng tôi phải giới thiệu nó như một dự án mới và kết hợp xây dựng tự động của nó vào quá trình xây dựng của chúng tôi.
Nếu bạn đang thực hiện một bản vá, bản vá là một phần của mã của riêng bạn, điều đó có nghĩa là bạn phải biến nó thành một phần của quy trình. Điều này không khác gì việc thêm một cái gì đó 100% mã của bạn vào hệ thống của bạn. Hãy coi phân phối của bên thứ ba là bất khả xâm phạm và đưa nó vào một mô-đun giống như mã nguồn. Bất kỳ bản vá nào bạn viết đều được lưu trữ trong các tệp riêng biệt và được áp dụng như một phần của quy trình xây dựng. Bằng cách đó, bạn luôn đi từ nguồn sạch sang nguồn được vá cho sản phẩm được xây dựng và có thể hiển thị chính xác những gì đang diễn ra. (Một số người giải nén, vá tay, đóng gói lại và lưu trữ trong kiểm soát phiên bản. Điều đó thật tệ.)
... Chúng tôi sẽ kéo mã của họ từ kho lưu trữ kiểm soát nguồn của họ vào của chúng tôi và chúng tôi mất lịch sử đằng sau bất kỳ thay đổi mã nào ...
Nếu bạn coi thư viện của bên thứ ba là phụ thuộc của bên thứ ba, bạn không có lịch sử đó để bắt đầu và bạn sẽ không mất gì cả. Nếu bạn có quyền truy cập liên tục vào kho lưu trữ của bên thứ ba, bạn có thể tham khảo ý kiến mà bạn cần. Các bản phát hành của bên thứ ba nên được xử lý như các đốm vô định hình mà bạn kiểm tra vào hệ thống của riêng bạn không bị thay đổi. Nếu bạn cần xem xét các thay đổi giữa bản phát hành bạn đang sử dụng và bản phát hành mới hơn, bạn có thể làm điều đó và, nếu bạn muốn, đưa ra các bản vá cho phiên bản cũ kết hợp các thay đổi bạn muốn.
Ngoài ra, có vẻ như một cái gì đó quá phức tạp đối với một thay đổi mã nhỏ như vậy cần phải được thực hiện.
Nếu quy trình xây dựng của bạn đủ tinh vi, việc thêm điều này sẽ không khó khăn hơn việc thêm mã của riêng bạn. Có một lượng lao động nhỏ để đưa nó đến điểm mà quá trình giải nén / vá / xây dựng là tự động, nhưng một khi nó được thực hiện, nó sẽ được thực hiện mãi mãi. Có thể có một lỗi bây giờ, nhưng có thể có hai mươi trong tương lai. Nếu có, bạn sẽ vui hơn nhiều khi bạn đặt nền tảng để hỗ trợ tất cả những điều đó ngay bây giờ, bởi vì nó sẽ giúp giải quyết 19 công việc tiếp theo ít hơn nhiều.