Trong công việc của chúng tôi, chúng tôi có một số ứng dụng .net khác nhau có chung nhiều chức năng cơ bản. Chúng tôi đã xây dựng các ứng dụng này bằng kiến trúc n tầng sạch, nhưng chúng tôi đã đạt được thời điểm đó khi chúng tôi nhận ra rằng chúng tôi đã triển khai lại các chức năng tương tự nhiều lần khác nhau. Rõ ràng điều này vi phạm DRY, và chúng tôi muốn sửa nó. Chúng tôi đã sử dụng Nuget để thành công cho mã keo thông thường (kết nối IoC, ghi nhật ký, cài đặt), nhưng chúng tôi cũng muốn chia sẻ dữ liệu và lớp kinh doanh giữa tất cả các ứng dụng của mình. Ý tưởng là UI sẽ chỉ xử lý các phần của lớp nghiệp vụ mà nó thực sự cần.
Điều này có vẻ như là một vấn đề đơn giản lúc đầu, nhưng sự phát triển đang diễn ra có thể cung cấp một số cạm bẫy và chúng tôi không chắc chắn nên tiến hành như thế nào. Giả sử chúng ta tạo một lớp kinh doanh để thống trị tất cả. Để cho ngắn gọn, tôi sẽ gọi nó là "Foundation." Chúng tôi chuyển các ứng dụng của mình để sử dụng Foundation và mọi thứ đang hoạt động rất tốt. Nền tảng được phân phối cho các lớp UI nhẹ thông qua nuget và chúng tôi đang tìm kiếm tốt. Nhưng sau đó chúng tôi bắt đầu thêm các tính năng cho các ứng dụng của mình và chúng tôi gặp rắc rối.
Giả sử chúng tôi đang làm việc trên Dự án A và chúng tôi thêm một tính năng mới yêu cầu thay đổi đối với Foundation. Chúng tôi thực hiện các thay đổi đối với nền tảng (Foundation-A) và đẩy chúng ra nguồn cấp dữ liệu nuget dưới dạng gói không ổn định. Dự án A có gói nuget mới nhất, và tất cả đều tốt. Trong khi đó, một nhà phát triển khác đang làm việc trên Dự án B. Anh ta nhận được Quỹ mới nhất từ kiểm soát nguồn, nhưng lấy nó từ một chi nhánh ổn định, để nó không có các thay đổi của Dự án A trong đó. Anh ấy thực hiện các thay đổi và tạo ra Foundation-B. Và tất cả đều tốt. Nhưng sau đó chúng tôi phát hiện ra rằng chức năng triển khai Foundation-A và Foundation-B thực sự có thể chia sẻ mã, vì vậy chúng tôi kết hợp chúng. Trong khi đó Foundation-C đang trôi nổi ngoài kia với những thay đổi của chính nó. Cuối cùng, Foundation-B đã sẵn sàng để sản xuất, vì vậy chúng tôi đẩy nó ra. Nhưng sau đó chúng ta cần cập nhật Sản xuất A, B,
Điều này có vẻ như có thể hoạt động, nhưng chúng tôi lo lắng về việc làm việc với các lược đồ cơ sở dữ liệu khác nhau và giữ mọi thứ được đồng bộ hóa giữa các nhánh khác nhau của kho lưu trữ Foundation cũng như các kho lưu trữ của Dự án A, B và C. Có vẻ như nó có thể sẽ mất rất nhiều công việc thủ công, điều này mở ra khả năng xảy ra lỗi. Tôi muốn điều này càng tự động càng tốt.
Đây là ngăn xếp chúng tôi đang sử dụng: C #, TFS với Tích hợp liên tục, Nuget. Các ứng dụng của chúng tôi là tất cả các loại ứng dụng ASP.NET. Chúng tôi sẵn sàng xem xét các SCM khác nhau nếu điều đó sẽ giúp mọi việc dễ dàng hơn.
Tôi đang tìm cách để giữ cho Nuget lành mạnh với các nhánh mã nguồn khác nhau của chúng tôi. Chúng tôi không muốn vô tình đẩy mã phát triển vào sản xuất vì chúng tôi tham chiếu Gói Nuget sai.