Tôi đã tham gia vào một số dự án máy tính để bàn MVC.NET và c # trong công ty của chúng tôi trong năm ngoái hoặc lâu hơn trong khi quản lý để giữ mũi tôi chọc vào các dự án khác (tất nhiên là trong khả năng học tập chỉ đọc).
Từ điều này tôi nhận thấy rằng trên các dự án và nhóm khác nhau, có rất nhiều chức năng được thiết kế tốt chống lại các giao diện và trừu tượng tốt. Bởi vì đôi khi chúng ta thích công việc của mình, tôi nhận thấy một vài dự án có cùng một lớp, phương thức được sao chép vào đó vì nó rõ ràng đã làm việc trên một và do đó dễ dàng chuyển sang một dự án mới (có thể bởi cùng một nhà phát triển ban đầu viết nó)
Tôi đã đề cập đến thực tế này trong một trong các cuộc họp lập trình viên của chúng tôi, thỉnh thoảng chúng tôi đã đề nghị chúng tôi kéo một số chức năng này vào thư viện công ty cốt lõi để chúng tôi có thể xây dựng theo thời gian và sử dụng trên nhiều dự án. Mọi người đồng ý và tôi bắt đầu xem xét khả năng này.
Tuy nhiên, tôi đã bắt gặp một vấp ngã khá sớm. Nhóm của chúng tôi chủ yếu tập trung vào MVC vào lúc này và chúng tôi có các dự án chủ yếu ở 2.0 nhưng đang bắt đầu phân nhánh lên 3.0. Chúng tôi cũng có một số ứng dụng máy tính để bàn có thể được hưởng lợi từ một số lớp chia sẻ và phương thức trợ giúp cơ bản.
Ban đầu khi tạo DLL này, tôi đã bao gồm một số lớp chia sẻ có thể được sử dụng trên bất kỳ loại dự án nào (Web, Client, v.v.) nhưng sau đó tôi bắt đầu xem xét thêm một số mô-đun chia sẻ chỉ hữu ích trong các ứng dụng MVC của chúng tôi. Tuy nhiên, điều này có nghĩa là tôi phải bao gồm một tham chiếu đến một số Microsoft Web DLL để tận dụng một số lớp tôi đang tạo (ở giai đoạn MVC 2.0 này).
Bây giờ vấn đề của tôi là chúng ta có một DLL được chia sẻ có tham chiếu đến các thư viện cụ thể trên web mà cũng có thể được sử dụng trong ứng dụng khách. Không chỉ vậy, DLL của chúng tôi tham chiếu ban đầu MVC 2.0 và cuối cùng chúng tôi sẽ chuyển sang MVC 3.0 cho tất cả các dự án. Nhưng rất nhiều lớp trong thư viện này, tôi hy vọng vẫn có liên quan đến MVC 3, v.v.
Mã của chúng tôi trong DLL này được phân tách thành các không gian tên riêng của nó, chẳng hạn như:
- CompanyDLL.Primitive
- Công tyDLL.Web.Mvc
- CompanyDLL. Người trợ giúp, v.v.
Vì vậy, câu hỏi của tôi là:
- Bạn có thể làm một thư viện chia sẻ như thế này không, hoặc nếu chúng ta có các tính năng cụ thể của web thì chúng ta có nên tạo một DLL web riêng biệt chỉ nhắm mục tiêu vào một khung hoặc phiên bản MVC cụ thể không?
- Nếu nó ổn, loại vấn đề nào chúng ta có thể gặp phải khi sử dụng thư viện tham chiếu MVC 2 trong dự án MVC 3 chẳng hạn. Tôi sẽ nghĩ rằng chúng ta có thể gặp phải một số vấn đề tương thích hoặc thậm chí các vấn đề mà các nhà phát triển sử dụng thư viện không nhận ra họ cần thư viện MVC 2.0. Họ có thể chỉ muốn sử dụng một số lớp chung, v.v.
Khái niệm này có vẻ như là một ý tưởng tốt vào thời điểm đó, nhưng tôi bắt đầu nghĩ rằng có lẽ nó không thực sự là một giải pháp thực tế. Nhưng số lần tôi đã thấy các lớp và phương thức sao chép trong các dự án vì chúng được chứng minh mã đã được kiểm tra là một chút không đáng tin để hoàn toàn trung thực!
CẬP NHẬT : Hơn nữa để Bernards trả lời mà tôi đã thực hiện trên tàu và có vẻ như lời khuyên tốt. Tuy nhiên tôi muốn tạo một số lớp chia sẻ có thể sẽ hữu ích trong cả hai dự án MVC 2 và MVC 3. Tuy nhiên, phần chia sẻ của tôi sẽ phải tham chiếu một trong các khung MVC để tôi tạo các lớp dùng chung của mình ở vị trí đầu tiên.
Vì vậy, để mở rộng trên Q2 của tôi ở trên.
- Nếu tôi muốn một giải pháp web MVC 3, tôi có phải có một dự án CompanyDLL.Web.Mvc3 được chia sẻ mà sau đó cụ thể sẽ tham khảo MVC 3 không? Điều đó có nghĩa là sao chép tất cả mã từ giải pháp CompanyDLL.Web.Mvc2 của tôi sang dự án chia sẻ Mvc3 mới này?
Có vẻ như tôi đang thiếu một số kỹ năng thiết kế cơ bản trong việc tạo ra các hội đồng chia sẻ và xây dựng và tham chiếu với các phiên bản khung khác nhau. Hoặc nó có thể chỉ đơn giản như chúng ta hút nó và tạo một thư viện CompanyDLL.Web.Mvc2 , CompanyDLL.Web.Mvc3 , CompanyDLL.Web.Mvc4 , v.v.