Tạo thư viện dùng chung có thể được sử dụng với các ứng dụng máy tính để bàn và các dự án web


7

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à:

  1. 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?
  2. 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đã đượ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.

  1. 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.

Câu trả lời:


5

Tạo các thư viện chia sẻ riêng cho các nền tảng khác nhau của bạn (máy tính để bàn và web). Bất cứ điều gì cả hai thư viện này sẽ cần phải đi trong một thư viện chia sẻ riêng. Vì vậy, bạn có thể chia các thư viện này như sau:

  • Company.Core: Được sử dụng bởi tất cả các thư viện. Chứa mã chung, các lớp của trình trợ giúp, v.v. không dành riêng cho bất kỳ nền tảng nào. Tài liệu tham khảo không có thư viện chia sẻ khác.
  • Company.Core.Desktop: Được sử dụng bởi các ứng dụng máy tính để bàn. Company.CoreThư viện tài liệu tham khảo .
  • Company.Core.Web: Được sử dụng bởi các ứng dụng web. Company.CoreThư viện tài liệu tham khảo .

Điều này cho phép bạn thay đổi công nghệ web đang được sử dụng mà không ảnh hưởng đến công nghệ máy tính để bàn đang được sử dụng. Điều này cũng cho phép bạn thêm nhiều nền tảng hơn trong tương lai (ví dụ Company.Core.Mobile).

Đảm bảo các thư viện này được kiểm tra đơn vị và không bao giờ sao chép mã giữa các dự án.


Cảm ơn Bernard cho lời khuyên. Còn vấn đề với việc tham chiếu các phiên bản khác nhau của thư viện Microsoft trong các DLL được chia sẻ thì sao?
dreza

Bạn có nghĩa là các phiên bản khác nhau của cùng một thư viện? MVC 2 so với MVC 3?
Bernard

Vâng, đây chính xác là những gì chúng tôi đã làm trong cùng một hoàn cảnh. Hoàn hảo.
gahooa

@Bardard. Đúng. Tôi hy vọng thư viện chia sẻ của chúng tôi sẽ tham chiếu MVC 2. Nhưng nếu một dự án mới sử dụng thư viện này muốn sử dụng MVC 3. Tôi thậm chí không chắc đó có phải là vấn đề không nhưng tôi không biết tác dụng của
dreza

2
+1; Tôi chắc chắn rằng trừ khi bạn đang sử dụng các tính năng RẤT cụ thể của các bản phát hành MVC, chúng được thiết kế để tương thích với hầu hết các phần.
RichardW1001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.