Tôi đã xây dựng một hệ thống, bắt đầu với một ứng dụng máy tính để bàn, 15 năm trước khi Java vẫn còn ở giai đoạn sơ khai và chưa sẵn sàng để sử dụng để xây dựng các loại ứng dụng này. Tôi biết rằng tôi cần phải có lõi trong C ++ và thiết kế nó ngay từ đầu để trở thành nền tảng chéo, bao gồm sử dụng các loại có kích thước (ví dụ int32 thay vì int hoặc long), để nó có thể chạy trên Mac, Windows và UNIX (tiền Linux ngày).
Vào thời điểm tôi cố gắng tìm kiếm một môi trường UI đa nền tảng tốt, đã có một vài cái sau đó bao gồm XVT. Tôi đã trải qua khóa đào tạo cho XVT và khi tôi bắt đầu xây dựng một ứng dụng thực sự, tôi nhận ra rằng tôi sẽ không thể tạo ra giao diện sạch sẽ, tự nhiên trên nền tảng (bắt đầu với Mac). Vì vậy, tôi đã từ bỏ ý tưởng đó và xây dựng giao diện người dùng Mac (PowerPlant) gốc trên lõi di động.
Vài năm sau, chúng tôi chuyển sang Windows (UI trong MFC). Việc xây dựng giao diện người dùng nhanh hơn lần thứ hai, chúng tôi đã duy trì song song giao diện người dùng Mac và Windows trong một thời gian ngắn và sau đó chuyển sang Windows. Lõi sau này chuyển sang các hương vị khác nhau của UNIX và Linux, để cho phép chúng tôi chạy các tính toán dựa trên máy chủ. Lõi đã hoạt động tốt, với một số điều chỉnh khi chúng tôi sẵn sàng 64-bit.
Bây giờ tôi quay lại sử dụng máy Mac và tôi ước chúng tôi có thể quay lại máy Mac, nhưng kích thước và độ phức tạp của ứng dụng khiến đây là một lựa chọn khó khăn. Nó vẫn có ý nghĩa đối với phần lớn ứng dụng này là một ứng dụng máy tính để bàn - nó giống như một môi trường CAD. Nhưng thay vì xây dựng lại UI bằng ngôn ngữ C / C ++ dành riêng cho nền tảng (và tiếp tục duy trì UI dựa trên MFC), tôi có xu hướng viết lại toàn bộ ngăn xếp trong Java để nó có thể chạy trên nhiều nền tảng.
Vẫn có thể có lý do để chạy lõi không phải Java, nói C ++ như chúng ta đã làm. Nhưng tôi sẽ muốn chạy thử nghiệm hiệu suất sớm để xem nếu điều đó thực sự cần thiết. Và tôi sẽ xem xét kỹ giao diện người dùng của mình để xem liệu tôi có thể xây dựng nó như một ứng dụng web, kết nối với lõi thông qua các dịch vụ web hay không, vì vậy tôi có thể có một loạt khách hàng - ứng dụng máy tính để bàn, ứng dụng di động, ứng dụng web, v.v. Nếu tôi cần một phần trong C hoặc C ++, nó có thể được viết dưới một lớp Java không? Hay như một dịch vụ web?
Một cân nhắc khác - ứng dụng của bạn sẽ tồn tại bao lâu? Làm thế nào nó sẽ phát triển phức tạp? Nếu bạn có bất kỳ ý tưởng nào về điều này, hãy xem xét tuổi thọ có thể có của bất kỳ thư viện UI nào bạn đang sử dụng và khả năng của bạn theo thời gian để có người giúp duy trì chúng. Điều này có thể khó để xem xét bây giờ nhưng đáng suy nghĩ.
- Alex