2010-05-31 19 views
8

Tôi muốn biết cách tốt nhất để lập trình ba phiên bản khác nhau của ứng dụng C# ASP.NET 3.5 trong VS2008 Professional (bao gồm dự án triển khai web). Tôi có phiên bản Light, Pro và Ultimate (hoặc phiên bản) của ứng dụng của tôi. Hiện tại tôi đã đặt tất cả trong một giải pháp với ba phiên bản xây dựng trong trình quản lý cấu hình và tôi sử dụng chỉ thị tiền xử lý trên toàn bộ mã (có khoảng 20 cấu trúc như vậy trong một số mười nghìn dòng mã, vì vậy nó có thể được giám sát):Làm thế nào để lập trình ba phiên bản Light, Pro, Ultimate trong một giải pháp

#if light 
//light code 
#endif 
#if pro 
//pro code 
#endif //etc... 

Tôi đã đọc trong stackoverflow cho giờ và nghĩ rằng sẽ gặp phải ví dụ như thế nào Microsoft thực hiện điều này với các phiên bản Windows khác nhau của nó, nhưng không tìm thấy những gì tôi mong đợi. Một nơi nào đó có một cuộc thảo luận nặng về các chỉ thị tiền xử lý là điều ác.

Những gì tôi muốn với những # if-chỉ thị là:

  • mã side-by-side của sự khác biệt, vì vậy tôi sẽ hiểu được mã cho phiên bản khác nhau sau sáu tháng
  • và lợi ích đặc biệt KHÔNG cung cấp cho mã được biên dịch của các phiên bản khác cho khách hàng.

OK, câu hỏi dài, câu hỏi lặp lại: Cách tốt nhất để đi là gì?

Trả lời

7

tôi bị cám dỗ để quản lý những khác biệt trong runtime với giấy phép khác nhau, và bật/tắt các tính năng sử dụng cấu hình đó. Tại sao ?

  1. bạn chỉ phải tạo một tài khoản có thể triển khai.
  2. bạn có thể kiểm tra đơn vị này dễ dàng hơn nhiều, thay vì xây dựng 3 phiên bản và kiểm tra điều này.
  3. người dùng có thể nâng cấp và chỉ cần được gửi giấy phép mới. Họ sẽ không phải nâng cấp/cài đặt lại.

Bạn phải cân nhắc vấn đề này để phân phối giải pháp mà khách hàng của bạn chưa thực sự trả tiền (và chỉ có thể bật thông qua khóa cấp phép bảo mật thích hợp).

+0

Cảm ơn rất nhiều vì câu trả lời này. Tôi đã đọc rất nhiều về các khóa cấp phép và các ý kiến ​​khác. Ý kiến ​​hiện tại của tôi là cố gắng hết sức để phát triển các tính năng mới so với thời gian đầu tư vào cấp phép/obfuscation làm phức tạp tất cả và dễ bị phá hoại bởi tin tặc. Vì đây là một ứng dụng ASP.NET, được sử dụng trong các tập đoàn: - Tôi gửi phiên bản chính xác (Light, Pro ..) cho mỗi công ty - và tính phí theo năm - gần cuối giấy phép một lời nhắc xuất hiện (Tôi cũng gọi cho khách hàng) - nếu không có gia hạn được thực hiện, một timebomb tạm dừng thực hiện - về gia hạn tôi gửi một ứng dụng mới với timebomb hoãn lại – Henry99

0

tôi sẽ đề xuất tạo các lớp và tính năng cơ bản như bình thường, nhưng để cho phép ghi đè cho các toán học đó sẽ là phiên bản cụ thể.

sau đó bạn tạo một phiên bản nhẹ/pro/ultimate edition để ghi đè các phương thức đó.

thì bạn cần một nhà máy, có thể tạo ra các loại ghi đè chính xác tùy thuộc vào ấn bản.

đây bạn có thể làm việc với các nội accessor và làm cho mã lắp ráp nội bộ có thể nhìn thấy các phiên bản-assemblys

2

Suy nghĩ đầu tiên của tôi là chia phần mềm của bạn thành các mô-đun khác nhau (dự án/hội đồng) và sau đó tạo ba dự án thiết lập khác nhau trong giải pháp của bạn, một cho mỗi phiên bản. Trong quá trình cài đặt, bạn chỉ bao gồm các mô-đun bạn cần.

Bạn sẽ mất mã "cạnh nhau", nhưng IMHO này chỉ tạo ra các phương thức phức tạp, thay vì mã có thể duy trì.Sử dụng các phương thức mở rộng, nếu bạn muốn cung cấp nhiều chức năng hơn cho một loại hoặc lấy được các lớp.

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