Phát triển các ứng dụng web cho tuổi thọ dài (hơn 20 năm)


160

Tôi hiện đang phát triển một ứng dụng web cho quy hoạch đất đai của chính phủ. Ứng dụng chạy chủ yếu trong trình duyệt, sử dụng ajax để tải và lưu dữ liệu.

Tôi sẽ làm việc phát triển ban đầu, và sau đó tốt nghiệp (đó là công việc của sinh viên). Sau này, phần còn lại của nhóm sẽ thêm tính năng không thường xuyên khi cần thiết. Họ biết cách viết mã, nhưng họ chủ yếu là các chuyên gia quy hoạch đất đai.

Xem xét tốc độ thay đổi công nghệ Javascript, làm cách nào tôi có thể viết mã vẫn hoạt động được 20 năm kể từ bây giờ? Cụ thể, những thư viện, công nghệ và ý tưởng thiết kế nào tôi nên sử dụng (hoặc tránh) để chứng minh mã của mình trong tương lai?


94
Tôi bắt đầu lập trình ở Fortran vào cuối năm 1966, vì vậy tôi đã có nhiều thời gian để suy nghĩ về chính xác loại vấn đề đó. Nếu bạn từng gặp một câu trả lời đáng tin cậy thậm chí 50%, xin vui lòng cho tôi biết. Trong khi đó, chỉ cần nghĩ về sự lỗi thời gần như chắc chắn là "bảo mật công việc" :)
John Forkosh

11
Không có gì tồn tại mãi mãi trong Kỹ sư phần mềm. Chỉ HOST tại các ngân hàng và vì không ai dám cập nhật các hệ thống quan trọng như vậy. Chà, tôi đoán chương trình đang chạy trong Voyager cũng được tính.
Laiv

9
@Laiv Một thời gian trước, tôi đã làm việc trên các ứng dụng chuyển tiền cho Bankers Trust bằng cách sử dụng tin nhắn Swift chạy trên Vax / VMS. Vài năm sau, Swift eol'ed (cuối đời) tất cả hỗ trợ VMS. Boy, điều đó đã gây ra một số vấn đề ... và cung cấp cho tôi một hợp đồng khác tại BTCo. Giống như tôi đã nói ở trên, "bảo mật công việc" :). Dù sao, quan điểm của tôi là ngay cả các ứng dụng thị trường tài chính quan trọng cũng không tránh khỏi sự lỗi thời.
John Forkosh

102
Làm thế nào về "Viết mã mà nhà phát triển tiếp theo có thể hiểu"? Nếu và khi mã trở nên lỗi thời đến mức họ sẽ cần tìm một lập trình viên để cập nhật nó, kịch bản tốt nhất là họ sẽ hiểu mã của bạn đang làm gì (và có thể tại sao một số quyết định được đưa ra).
David Starkey

38
Chỉ cần sử dụng HTML cũ đơn giản, không có JS, không có plugin, không có gì lạ mắt. Nếu nó hoạt động trong Lynx, nó sẽ tốt cho mọi thời đại.
Gaius

Câu trả lời:


132

Phần mềm lập kế hoạch cho tuổi thọ như vậy rất khó, bởi vì chúng ta không biết tương lai sẽ ra sao. Một chút bối cảnh: Java đã được xuất bản năm 1995, 21 năm trước. XmlHttpRequest lần đầu tiên có sẵn dưới dạng tiện ích mở rộng độc quyền cho Internet Explorer 5, được xuất bản 1999, 17 năm trước. Phải mất khoảng 5 năm cho đến khi nó có sẵn trên tất cả các trình duyệt chính. 20 năm bạn đang cố gắng nhìn về phía trước chỉ là khoảng thời gian các ứng dụng web phong phú thậm chí còn tồn tại.

Một số điều chắc chắn vẫn giữ nguyên kể từ đó. Đã có một nỗ lực tiêu chuẩn hóa mạnh mẽ, và hầu hết các trình duyệt đều tuân thủ tốt các tiêu chuẩn khác nhau có liên quan. Một trang web hoạt động trên các trình duyệt 15 năm trước vẫn sẽ hoạt động như nhau, miễn là nó hoạt động vì nó nhắm mục tiêu tập hợp con chung của tất cả các trình duyệt, chứ không phải vì nó sử dụng cách giải quyết cho mỗi trình duyệt.

Những thứ khác đến và đi - nổi bật nhất là Flash. Flash có nhiều vấn đề dẫn đến sự sụp đổ của nó. Quan trọng nhất, nó đã được kiểm soát bởi một công ty duy nhất. Thay vì cạnh tranh bên trong nền tảng Flash, đã có sự cạnh tranh giữa Flash và HTML5 - và HTML5 đã giành chiến thắng.

Từ lịch sử này, chúng ta có thể thu thập một vài manh mối:

  • Giữ cho nó đơn giản: Làm những gì hoạt động ngay bây giờ, mà không phải sử dụng bất kỳ cách giải quyết. Hành vi này có thể sẽ tồn tại lâu dài trong tương lai vì lý do tương thích ngược.

  • Tránh phụ thuộc vào các công nghệ độc quyền, và thích các tiêu chuẩn mở.

Thế giới JavaScript ngày nay tương đối biến động với lượng thư viện và khung công tác cao. Tuy nhiên, gần như không ai trong số họ sẽ quan trọng trong 20 năm - khung duy nhất mà tôi chắc chắn sẽ vẫn được sử dụng trước đó là Vanilla JS .

Nếu bạn muốn sử dụng thư viện hoặc công cụ vì nó thực sự giúp phát triển dễ dàng hơn nhiều, trước tiên hãy đảm bảo rằng nó được xây dựng trên các tiêu chuẩn được hỗ trợ tốt ngày nay. Sau đó, bạn phải tải xuống thư viện hoặc công cụ và bao gồm nó với mã nguồn của bạn. Kho lưu trữ mã của bạn nên bao gồm mọi thứ cần thiết để có được hệ thống có thể chạy được. Bất cứ điều gì bên ngoài là một sự phụ thuộc có thể phá vỡ trong tương lai. Một cách thú vị để kiểm tra điều này là sao chép mã của bạn vào ổ đĩa ngón tay cái, đi đến một máy tính mới có hệ điều hành khác, ngắt kết nối nó khỏi internet và xem liệu bạn có thể làm cho giao diện của mình hoạt động không. Miễn là dự án của bạn bao gồm HTML + CSS + JavaScript đơn giản cộng với có lẽ một số thư viện, bạn có thể sẽ vượt qua.


4
Cho đến nay, các ứng dụng quy mô lớn vẫn chưa được biết đến trong vanilla js. ES6 bằng cách nào đó đã khắc phục vấn đề, nhưng có một lý do tại sao luồng hoặc TypeScript đang trở nên phổ biến.
Andy

34
@DavidPacker Hoàn toàn, TypeScript, v.v ... rất tuyệt và giúp phát triển dễ dàng hơn. Nhưng ngay khi tôi giới thiệu quy trình xây dựng, tất cả các công cụ cần thiết cho quy trình xây dựng sẽ trở thành phụ thuộc: NodeJS, Gulp, NPM - ai nói NPM sẽ vẫn trực tuyến sau 20 năm nữa? Tôi sẽ phải chạy đăng ký của riêng tôi để chắc chắn. Điều này không phải là không thể. Nhưng một số điểm, tốt hơn hết là bạn nên từ bỏ những thứ giúp phát triển dễ dàng hơn ngay lập tức, nhưng không lâu dài.
amon

30
@DavidPacker Có nhiều ngôn ngữ động và thật ngạc nhiên, nhiều hệ thống thành công đã được xây dựng với Smalltalk, Ruby, Perl, Python, thậm chí với PHP và JS. Mặc dù các ngôn ngữ được nhập tĩnh có xu hướng dễ bảo trì hơn trong khi các ngôn ngữ động có xu hướng tốt hơn để tạo mẫu nhanh, nhưng không thể viết JS có thể duy trì. Trong trường hợp không có trình biên dịch, kỹ năng trung bình cao trong nhóm, sự khéo léo và nhấn mạnh thêm vào tổ chức mã rõ ràng càng trở nên quan trọng hơn. Cá nhân tôi nghĩ rằng các loại làm cho mọi thứ dễ dàng hơn, nhưng chúng không phải là viên đạn bạc.
amon

4
Có phải tôi vừa đọc "lấy usb và kiểm tra trên máy khác"? Tại sao không quay spin hộp ảo hoặc chỉ sử dụng chế độ ẩn danh (đã tắt ethX).
Kyslik

5
Tôi không chắc chắn vanilla JS sẽ là một điều chắc chắn sau 20 năm nữa. Lịch sử của nó là đá và thử nghiệm, và nó đã thu được một số lượng khá lớn trên đường đi, ngay cả khi nó nổi lên như một ngôn ngữ thú vị và hiệu quả (cá nhân tôi thích bản thân JavaScript hoặc TypeScript). Không khó để tưởng tượng rằng các nhà cung cấp có thể muốn bỏ một số hoặc tất cả hành trình đó, cho dù điều đó có nghĩa là bắt đầu cung cấp một ngôn ngữ thay thế mới như Google dường như đang đề xuất với Dart, tuy nhiên dường như không đi đến đâu cả Cách khắc phục bằng cách loại bỏ và sau đó loại bỏ các phần của JS.
KRyan

178

Điều thậm chí còn quan trọng hơn mã của bạn tồn tại trong 20 năm là dữ liệu của bạn tồn tại trong 20 năm. Rất có thể, đó là điều đáng để bảo tồn. Nếu dữ liệu của bạn dễ làm việc, việc xây dựng một hệ thống thay thế trên đầu trang với công nghệ mới hơn sẽ dễ dàng.

  • Vì vậy, bắt đầu với một mô hình dữ liệu rõ ràng và tài liệu tốt.
  • Sử dụng một hệ thống cơ sở dữ liệu được thiết lập, được hỗ trợ tốt, chẳng hạn như Oracle [1] hoặc SQL Server.
  • Sử dụng các tính năng cơ bản, đừng cố gắng sử dụng các tính năng mới.
  • Thích đơn giản hơn thông minh .
  • Chấp nhận rằng khả năng duy trì trong tương lai có thể phải trả giá bằng các khía cạnh như hiệu suất. Ví dụ, bạn có thể muốn sử dụng các quy trình được lưu trữ, nhưng chúng có thể hạn chế khả năng bảo trì trong tương lai nếu chúng ngăn người khác chuyển hệ thống sang một giải pháp lưu trữ đơn giản hơn.

Khi bạn đã có điều đó, việc chứng minh ứng dụng trong tương lai sẽ đơn giản hơn, bởi vì đó là trình bao bọc xung quanh mô hình dữ liệu và có thể được thay thế nếu trong 10 năm nữa, chẳng ai sử dụng Javascript nữa, và bạn cần di chuyển ứng dụng sang WASM hoặc một cái gì đó. Giữ mọi thứ theo mô-đun, ít phụ thuộc lẫn nhau, cho phép bảo trì dễ dàng hơn trong tương lai.


[1] Hầu hết các ý kiến ​​cho câu trả lời này đều có lập trường mạnh mẽ chống lại việc sử dụng Oracle cho DB, trích dẫn rất nhiều lý do hoàn toàn chính đáng tại sao Oracle phải chịu khó làm việc, có đường cong học tập dốc và chi phí cài đặt. Đây là những mối quan tâm hoàn toàn hợp lệ khi chọn Oracle làm DB, nhưng trong trường hợp của chúng tôi, chúng tôi không tìm kiếm một DB có mục đích chung, mà một trong những mối quan tâm chính là khả năng duy trì . Oracle đã xuất hiện từ cuối những năm 70 và có thể sẽ được hỗ trợ trong nhiều năm tới, và có một hệ thống tư vấn và lựa chọn hỗ trợ khổng lồ có thể giúp bạn duy trì hoạt động. Đây có phải là một mớ hỗn độn quá cao cho nhiều công ty? Chắc chắn rồi. Nhưng nó sẽ giữ cho cơ sở dữ liệu của bạn chạy trong 20 năm ? Rất có thể.


141
Tôi xin lỗi, nhưng tôi phải nói điều này. Nếu bạn sử dụng Oracle, bạn sẽ bắn tất cả mọi người liên quan đến "dễ làm việc". Oracle không dễ để làm việc với một chút. Rất nhiều chức năng mà SQL Server, PostgreSQL và thậm chí cả MySQL làm cho đơn giản, Oracle hoặc không có hoặc không quá khó khăn. Tôi chưa bao giờ gặp nhiều vấn đề ngu ngốc với các DB khác như với Oracle; thậm chí chỉ cần thiết lập khách hàng là một nỗi đau rất lớn ở mông. Ngay cả những điều Googling cũng khó khăn. Nếu bạn muốn "dễ làm việc với", hãy tránh xa Oracle.
jpmc26

4
+1 để giữ dữ liệu đơn giản nhất có thể. Sử dụng SQL tiêu chuẩn cho điều này, ví dụ: sử dụng OUTER THAM GIA thay cho toán tử + orory cụ thể . Sử dụng bố trí bảng đơn giản. Không bình thường hóa các bảng của bạn đến mức tối đa tuyệt đối. Quyết định xem một số bảng có thể có dữ liệu dư thừa hoặc nếu bạn thực sự phải tạo một bảng mới để mọi giá trị chỉ tồn tại một lần. Được lưu trữ thủ tục nhà cung cấp cụ thể ? Nếu có thì không sử dụng chúng. Không sử dụng tính năng hấp dẫn của ngôn ngữ bạn chọn hiện tại: Tôi đã thấy nhiều chương trình COBOL hơn mà không có OOP-Feature sau đó với chúng. Và đó là hoàn toàn ok.
some_coder

3
@ jpmc26 Tôi đồng ý với những cảm nhận của bạn về Oracle, nhưng như tôi đã nói, "dễ làm việc với" không nhất thiết là yêu cầu chính ở đây. Tôi thích một nền tảng được hỗ trợ vững chắc ở đây, ngay cả khi nó là một công việc khó khăn. Bởi vì khi được khấu hao hơn 20 năm, nó không quá tệ.
Avner Shahar-Kashtan

8
Thực sự tránh Oracle. DB duy nhất tồn tại ngày nay có khả năng không giống như một lựa chọn tồi trong 20 năm là Postgresql.
Joshua

3
Tôi muốn thêm rằng DBMS mã nguồn mở tuyệt vời tốt hơn vì có nhiều khả năng họ sẽ không chết. Nếu Oracle ngừng kiếm tiền sau 10 năm, thì sau 11 năm nó sẽ biến mất. PostreSQL có vẻ như con ngựa tốt nhất để đặt cược vào.
Shautieh

36

Câu trả lời trước của amon rất hay, nhưng có hai điểm bổ sung không được đề cập:

  • Nó không chỉ là về trình duyệt; thiết bị cũng quan trọng

    amon đã đề cập đến một thực tế rằng một trang web trên mạng đã hoạt động trên các trình duyệt 15 năm trước vẫn sẽ hoạt động giống như vậy , điều này là đúng. Tuy nhiên, hãy nhìn vào các trang web được tạo ra không phải mười lăm, mà là mười năm trước, khi được tạo ra, đã hoạt động trong hầu hết các trình duyệt cho hầu hết người dùng. Ngày nay, một phần lớn người dùng sẽ không thể sử dụng các trang web đó, không phải vì trình duyệt đã thay đổi mà vì các thiết bị đã làm. Các trang web đó sẽ trông khủng khiếp trên màn hình nhỏ của thiết bị di động và cuối cùng không hoạt động nếu các nhà phát triển quyết định dựa vào clicksự kiện JavaScript mà không biết rằng tapsự kiện đó cũng quan trọng.

  • Bạn đang tập trung vào một chủ đề sai.

    Thay đổi công nghệ là một chuyện, nhưng một điều quan trọng hơn là những thay đổi của yêu cầu . Sản phẩm có thể cần được thu nhỏ hoặc có thể cần phải có các tính năng bổ sung hoặc có thể cần thay đổi các tính năng hiện tại của sản phẩm.

    Không có vấn đề gì sẽ xảy ra với trình duyệt, hoặc thiết bị, hoặc W3C, hoặc ... bất cứ điều gì.

    Nếu bạn viết mã theo cách có thể tái cấu trúc , sản phẩm sẽ phát triển cùng với công nghệ.

    Nếu bạn viết mã theo cách mà không ai có thể hiểu và duy trì nó, thì công nghệ không thành vấn đề: mọi thay đổi môi trường sẽ khiến ứng dụng của bạn bị hỏng, chẳng hạn như di chuyển sang một hệ điều hành khác, hoặc thậm chí là một điều đơn giản là tăng trưởng dữ liệu tự nhiên .

    Ví dụ, tôi làm việc trong lĩnh vực phát triển phần mềm trong mười năm. Trong số hàng chục và hàng chục dự án, chỉ có hai dự án tôi quyết định thay đổi vì công nghệ , chính xác hơn là vì PHP đã phát triển rất nhiều trong mười năm qua. Thậm chí đó không phải là quyết định của khách hàng: anh ta sẽ không quan tâm nếu trang web sử dụng không gian tên hoặc đóng cửa của PHP. Tuy nhiên, những thay đổi liên quan đến yêu cầu mới và khả năng mở rộng, có rất nhiều!


4
Việc chấp nhận các kích thước màn hình khác nhau là một vấn đề chung. Điện thoại di động là thứ được thổi phồng vào lúc này, nhưng nếu bạn đang xem trang web này trong cửa sổ trình duyệt toàn màn hình trên màn hình với độ phân giải đủ, sẽ có rất nhiều không gian trống (lãng phí). Thay đổi bố cục và cách trình bày thông tin để sử dụng tốt nhất các pixel có sẵn chưa bao giờ thực sự xảy ra theo cách thông minh. Điện thoại di động đã làm điều này rõ ràng. Nhưng suy nghĩ theo hướng khác có thể quan trọng hơn cho câu hỏi trong tầm tay.
null

9
@null: trong khi tôi đồng ý với nhận xét của bạn, các trang web StackExchange có thể không phải là minh họa tốt nhất cho quan điểm của bạn. Đưa ra dữ liệu để hiển thị, tôi tin rằng các nhà thiết kế / phát triển StackExchange đã làm rất tốt việc hiển thị nó khi nó cần được hiển thị, kể cả trên các màn hình lớn. Bạn không thể làm cho cột chính rộng hơn, vì văn bản sẽ trở nên khó đọc hơn nhiều và bạn không thể sử dụng nhiều cột vì nó sẽ không đẹp cho các câu hỏi và câu trả lời ngắn.
Arseni Mourzenko

Một ví dụ điển hình khác là sự kiện 'hover' thường được sử dụng trong các hệ thống menu. Nhiều trong số các menu đó thất bại thảm hại với các thiết bị cảm ứng.
Justas

Bạn đúng 110% (hoặc hơn) về các thiết bị và tôi có thể cung cấp cho bạn các ví dụ cũ hơn hàng thập kỷ. Quay trở lại vào cuối những năm 1980, tôi đã làm việc trên các ứng dụng CICS chạy trên các máy tính lớn của IBM và các thiết bị đầu cuối 3270 đồng bộ. Vùng CICS tương tự như các ứng dụng phía máy chủ, gửi dữ liệu đầy màn hình cùng một lúc đến các thiết bị đầu cuối đồng bộ, do đó tương tự như các trình duyệt thiết bị chuyên dụng. Và lập trình CICS có thể là 80% Cobol, 20% PL / 1. Cả hai ngôn ngữ này hầu hết đều lỗi thời và sự xuất hiện của các máy trạm Unix (Sun và Apollo) vào đầu những năm 1990 đã giết chết hoàn toàn CICS
John Forkosh

31

Bạn không có kế hoạch kéo dài 20 năm. Đơn giản và đơn giản. Thay vào đó, bạn chuyển mục tiêu của mình sang ngăn cách.

Là cơ sở dữ liệu ứng dụng của bạn bất khả tri? Nếu bạn phải chuyển đổi cơ sở dữ liệu ngay bây giờ, bạn có thể. Là ngôn ngữ logic bất khả tri của bạn. Nếu bạn phải viết lại ứng dụng bằng một ngôn ngữ hoàn toàn mới ngay bây giờ, bạn có thể không? Bạn có tuân theo các nguyên tắc thiết kế tốt như SRP và DRY không?

Tôi đã có các dự án sống lâu hơn 20 năm và tôi có thể nói với bạn rằng mọi thứ thay đổi. Giống như cửa sổ bật lên. 20 năm trước bạn có thể dựa vào một cửa sổ bật lên, ngày nay bạn không thể. XSS không phải là một điều 20 năm trước, bây giờ bạn phải tính đến CORS.

Vì vậy, những gì bạn làm là đảm bảo logic của bạn được phân tách độc đáo và bạn tránh sử dụng công nghệ BẤT K that khóa bạn vào một nhà cung cấp cụ thể.

Điều này có thể rất khó khăn đôi khi. Ví dụ, .NET rất tuyệt vời trong việc đưa ra logic và phương thức cho bộ điều hợp cơ sở dữ liệu MSSQL không có tương đương trong các bộ điều hợp khác. MSSQL có vẻ như là một kế hoạch tốt ngày hôm nay nhưng nó sẽ duy trì như vậy trong 20 năm? Ai biết. Một ví dụ về cách vượt qua điều này để có một lớp dữ liệu tách biệt hoàn toàn với các phần khác của ứng dụng. Sau đó, trường hợp xấu nhất, bạn chỉ phải viết lại toàn bộ lớp dữ liệu, phần còn lại của ứng dụng của bạn không bị ảnh hưởng.

Nói cách khác nghĩ về nó giống như một chiếc xe hơi. Xe của bạn sẽ không làm cho nó 20 năm. Nhưng, với lốp mới, động cơ mới, hộp số mới, cửa sổ mới, thiết bị điện tử mới, v.v ... Chiếc xe đó cũng có thể đi trên đường trong một thời gian rất dài.


2
"Nếu bạn phải chuyển đổi cơ sở dữ liệu ngay bây giờ, bạn có thể" Điều này không thể thực hiện được nếu bạn làm bất cứ điều gì nhiều hơn CRUD trên một hàng tại một thời điểm.
jpmc26

1
Rất nhiều ORM là cơ sở dữ liệu bất khả tri. Tôi có thể đưa ra bất kỳ một trong những dự án mà tôi đang làm việc trên gaurentee mà tôi có thể chuyển từ SQLLite, sang MySql và Postgre mà không cần nỗ lực.
coteyr

5
Và ORM không còn là công cụ rất tốt cho công việc khi bạn làm nhiều hơn CRUD đơn giản trên một bản ghi tại một thời điểm. Đó là lý do tại sao tôi đủ điều kiện. Tôi đã thử. Khi độ phức tạp của truy vấn tăng lên, ngay cả các ORM tốt nhất cũng trở nên rắc rối hơn là chỉ viết truy vấn và ngay cả khi bạn buộc truy vấn của mình vào chúng, bạn cũng nhanh chóng thấy mình sử dụng các tính năng hoặc tối ưu hóa cụ thể của cơ sở dữ liệu.
jpmc26

1
Xác định "phức tạp". Đây có phải là một hoạt động số lượng lớn? Có bao gồm các truy vấn cửa sổ? Truy vấn con? CTE? Công đoàn? Điều kiện nhóm phức tạp? Toán phức trên mỗi hàng và tập hợp? Có bao nhiêu tham gia trong một truy vấn duy nhất? Những loại tham gia? Có bao nhiêu hàng được xử lý cùng một lúc? Phải thừa nhận rằng, việc nói bất cứ điều gì qua CRUD một hàng bạn nghĩ. Và các bước để làm cho một truy vấn thực hiện tốt là rất thường xuyên cơ sở dữ liệu cụ thể.
jpmc26

4
"Cơ sở dữ liệu ứng dụng của bạn có phải là bất khả tri không? Nếu bạn phải chuyển đổi cơ sở dữ liệu ngay bây giờ, bạn có thể không? - Đây là lời khuyên TUYỆT VỜI TUYỆT VỜI! Đừng gò bó bản thân một cách giả tạo vào bất cứ điều gì bạn nghĩ mẫu số chung lớn nhất của ngôn ngữ lập trình hoặc cơ sở dữ liệu là - điều này sẽ buộc bạn phải phát minh lại bánh xe liên tục. Thay vào đó, hãy thử tìm cách TỰ NHIÊN để thể hiện hành vi mong muốn trong ngôn ngữ lập trình và cơ sở dữ liệu bạn chọn.
fgp

12

Câu trả lời của @amon và một số người khác là tuyệt vời, nhưng tôi muốn đề nghị bạn xem xét điều này từ một góc độ khác.

Tôi đã làm việc với các nhà sản xuất lớn và các cơ quan chính phủ, những người đã dựa vào các chương trình hoặc cơ sở mã đã được sử dụng hơn 20 năm và tất cả họ đều có một điểm chung - công ty kiểm soát phần cứng. Có một cái gì đó chạy và có thể mở rộng trong hơn 20 năm không khó khi bạn kiểm soát những gì nó chạy. Các nhân viên tại các nhóm này đã phát triển mã trên các máy hiện đại nhanh hơn hàng trăm lần so với các máy triển khai ... nhưng các máy triển khai đã bị đóng băng kịp thời.

Tình huống của bạn rất phức tạp, bởi vì một trang web có nghĩa là bạn cần lập kế hoạch cho hai môi trường - máy chủ và trình duyệt.

Khi nói đến máy chủ, bạn có hai lựa chọn chung:

  • Dựa vào hệ điều hành cho các chức năng hỗ trợ khác nhau có thể nhanh hơn nhiều, nhưng có nghĩa là HĐH có thể cần phải "đóng băng kịp thời". Nếu đó là trường hợp, bạn sẽ muốn chuẩn bị một số bản sao lưu cài đặt hệ điều hành cho máy chủ. Nếu một cái gì đó gặp sự cố trong 10 năm, bạn không muốn làm cho ai đó phát điên khi cố gắng cài đặt lại hệ điều hành hoặc viết lại mã để làm việc trong một môi trường khác.

  • Sử dụng các thư viện được phiên bản trong một ngôn ngữ / khung nhất định, chậm hơn, nhưng có thể được đóng gói trong môi trường ảo và có thể chạy trên các hệ điều hành hoặc kiến ​​trúc khác nhau.

Khi nói đến trình duyệt, bạn sẽ cần lưu trữ mọi thứ trên máy chủ (tức là bạn không thể sử dụng CDN toàn cầu để lưu trữ tệp). Chúng tôi có thể giả định rằng các trình duyệt trong tương lai vẫn sẽ chạy HTML và Javascript (ít nhất là để tương thích), nhưng đó thực sự là một phỏng đoán / giả định và bạn không thể kiểm soát điều đó.


11
Bạn phải xem xét bảo mật quá. Một hệ điều hành 20 năm không được hỗ trợ có thể sẽ đầy lỗ hổng bảo mật. Tôi đã làm việc cho một công ty và thừa hưởng vấn đề này. Cơ quan chính phủ, các hệ điều hành cổ đại (tất cả đều được ảo hóa từ lâu, may mắn thay), nhưng đây là một vấn đề lớn và việc nâng cấp là không thể do phải viết lại hoàn toàn phần mềm (hàng trăm tập lệnh PHP mã spaghetti riêng lẻ, mỗi tập lệnh đều có cơ sở dữ liệu được mã hóa cứng, sử dụng các chức năng không dùng nữa mà trình điều khiển mới không hỗ trợ / rùng mình).

Nếu bạn đi theo con đường HĐH, tốt nhất bạn có thể hy vọng rằng các bản vá bảo mật đã được áp dụng và những người bảo trì trong tương lai sẽ có thể che chắn mọi thứ ở lớp mạng. Để lập kế hoạch cho công cụ hoạt động như thế này trong dài hạn (đặc biệt là không có ngân sách lớn, vì OP là sinh viên), về cơ bản bạn cần phải chấp nhận rằng ứng dụng và máy chủ của bạn cuối cùng sẽ trở nên không an toàn. Ví dụ, trong 20 năm cuối cùng sẽ tồn tại các khai thác đã biết cho phiên bản SSL trên máy chủ ... nhưng HĐH đó có thể không tương thích với các phiên bản openssl trong 10 năm. Đây là tất cả về giảm thiểu sự đánh đổi.
Jonathan Vanasco

@FighterJet, bạn luôn có thể chạy tường lửa trên một hệ điều hành được hỗ trợ, sau đó bạn có một số rủi ro ngoài các lần tiêm SQL, v.v. dù sao bạn cũng nên mã hóa.
Ian

@Ian: Tôi ước. Có một bức tường lửa. Nhưng tôi đã không viết mã, tôi thừa hưởng nó. Và đúng vậy, có hàng ngàn lỗ hổng SQL mà tôi ước mình có thể sửa được, nhưng vấn đề thực sự là mã phụ thuộc vào một phiên bản cụ thể của PHP4 (đã bị loại bỏ mãi mãi và đầy lỗ hổng bảo mật) và một phiên bản cụ thể của trình điều khiển cơ sở dữ liệu (không hoạt động trên các hệ điều hành mới hơn), điều này ngăn chúng tôi nâng cấp lên phiên bản mới hơn của cơ sở dữ liệu ... vấn đề là, dựa vào một cái gì đó giống nhau không phải lúc nào cũng hoạt động. Hãy nói rằng tôi rất vui vì tôi không làm việc ở đó nữa.

1
@FighterJet Đó thực sự là một ví dụ hay về những gì tôi muốn nói. Cuối cùng, bạn đã kế thừa mã chỉ hoạt động trên một phiên bản PHP4 cụ thể và trình điều khiển chỉ chạy trên một HĐH cụ thể ... vì vậy bạn không thể nâng cấp máy chủ. Tôi sẽ không ủng hộ bất cứ ai làm điều đó, nhưng nó xảy ra. -- rất nhiều. FWIW, tôi đồng ý với bạn nhưng tôi muốn câu trả lời của mình để thúc đẩy suy nghĩ xung quanh các loại kịch bản đó, không đưa ra khuyến nghị.
Jonathan Vanasco

6

Cốt lõi của hầu hết các ứng dụng là dữ liệu. Dữ liệu là mãi mãi. Mã là chi tiêu nhiều hơn , thay đổi, dễ uốn nắn. Các dữ liệu phải được bảo tồn, mặc dù. Vì vậy, tập trung vào việc tạo ra một mô hình dữ liệu thực sự vững chắc. Giữ lược đồ và dữ liệu sạch sẽ. Dự đoán, một ứng dụng mới có thể được xây dựng trên cùng một cơ sở dữ liệu.

Chọn một cơ sở dữ liệu có khả năng thực thi các ràng buộc toàn vẹn. Các ràng buộc không được ràng buộc có xu hướng bị vi phạm khi thời gian trôi qua. Không ai thông báo. Sử dụng tối đa các phương tiện như khóa ngoại, các ràng buộc duy nhất, kiểm tra các ràng buộc và có thể kích hoạt để xác nhận. Có một số thủ thuật để lạm dụng các quan điểm được lập chỉ mục để thực thi các ràng buộc về tính duy nhất của bảng chéo.

Vì vậy, có thể bạn cần chấp nhận rằng ứng dụng sẽ được viết lại vào một lúc nào đó. Nếu cơ sở dữ liệu sạch sẽ sẽ có rất ít công việc di chuyển. Di cư là vô cùng tốn kém về lao động và khiếm khuyết gây ra.

Từ góc độ công nghệ, có thể là một ý tưởng tốt để đặt hầu hết các ứng dụng trên máy chủ chứ không phải ở dạng JavaScript trên máy khách. Có lẽ bạn sẽ có thể chạy cùng một ứng dụng trong cùng một hệ điều hành trong một thời gian cực kỳ dài nhờ ảo hóa . Điều đó không thực sự tốt nhưng nó đảm bảo ứng dụng sẽ hoạt động được 20 năm kể từ bây giờ mà không phải trả bất kỳ chi phí bảo trì và phần cứng đắt đỏ nào. Làm điều này bạn ít nhất có được dự phòng an toàn và rẻ tiền khi tiếp tục chạy mã cũ, hoạt động.

Ngoài ra, tôi thấy rằng một số ngăn xếp công nghệ ổn định hơn những cái khác . Tôi muốn nói rằng .NET có câu chuyện tương thích ngược tốt nhất có thể hiện tại. Microsoft đã chết nghiêm trọng về nó. Java và C / C ++ cũng thực sự ổn định. Python đã chứng minh rằng nó rất không ổn định với các thay đổi phá vỡ Python 3. JavaScript thực sự có vẻ khá ổn định đối với tôi vì phá web không phải là một lựa chọn cho bất kỳ nhà cung cấp trình duyệt nào. Bạn có lẽ không nên dựa vào bất cứ điều gì thử nghiệm hoặc sôi nổi, mặc dù. ("Funky" được định nghĩa là "Tôi biết điều đó khi tôi nhìn thấy nó").


về câu chuyện tương thích ngược .net - Tôi không nghĩ rằng tôi đã thấy một ứng dụng java sẽ yêu cầu phiên bản java cũ hơn, ngược lại. Điều đó có thể thay đổi với Java 9 hoặc xa hơn, nhưng chưa thấy điều đó xảy ra.
eis

Nó tương thích đáng kinh ngạc trong thực tế và việc cài đặt phiên bản cũ hơn cạnh nhau không phải là vấn đề. Cũng lưu ý rằng .NET BCL nằm trong ước tính của tôi lớn hơn 10 - 100 lần so với các lớp dựng sẵn Java.
usr

khả năng tương thích ngược có nghĩa là không cần phải cài đặt phiên bản cũ hơn. Nhưng chúng tôi lạc đề từ câu hỏi ban đầu, điều này không thực sự phù hợp với OP.
eis

0

Các câu trả lời khác có ý nghĩa. Tuy nhiên, tôi cảm thấy các ý kiến ​​về công nghệ khách hàng là quá phức tạp. Tôi đã làm việc như một nhà phát triển trong 16 năm qua. Theo kinh nghiệm của tôi, miễn là bạn giữ mã khách hàng của mình trực quan, bạn sẽ ổn thôi. Vì vậy, không có "hack" với khung / iframe, v.v. Chỉ sử dụng các chức năng được xác định rõ trong trình duyệt.

Bạn luôn có thể sử dụng các chế độ tương thích trong trình duyệt để giữ cho chúng hoạt động.

Để chứng minh quan điểm của tôi, chỉ một vài tháng trước, tôi đã sửa một lỗi thiên niên kỷ trong mã javascript cho một khách hàng, người đã chạy ứng dụng web của họ trong 17 năm. Vẫn hoạt động trên các máy gần đây, cơ sở dữ liệu gần đây, hệ điều hành gần đây.

Kết luận: giữ cho nó đơn giản và sạch sẽ và bạn sẽ ổn.


1
Khung và iframe được xác định rất rõ trong thông số HTML. Điều gì làm cho chúng không phù hợp?
tò mò

3
@cquildannii: Việc sử dụng iframe không phải là quá nhiều (khung không còn được hỗ trợ trong HTML5), vì việc sử dụng khung và iframe để tải nội dung không đồng bộ thông qua tập lệnh, v.v. Nó có thể hoạt động tốt ngay bây giờ, nhưng nó sẽ luôn hoạt động tốt có thể thay đổi bảo mật.
Jonathan van de Veen

-2

Một vài tiên đề:

  • Sự thật tồn tại. Trong bối cảnh này, đó sẽ là các thuật toán và mô hình dữ liệu - mà mô tả trung thực "cái gì" và "cách thức" của không gian vấn đề của bạn. Mặc dù, luôn có tiềm năng để sàng lọc và cải thiện, hoặc một sự tiến hóa của chính vấn đề.
  • Ngôn ngữ phát triển. Điều này đúng với ngôn ngữ máy tính cũng như ngôn ngữ tự nhiên.
  • Tất cả các công nghệ dễ bị lỗi thời. Nó chỉ có thể mất nhiều thời gian hơn cho một số công nghệ so với những công nghệ khác

Các công nghệ và tiêu chuẩn ổn định nhất (những công nghệ ít bị tổn thương nhất) có xu hướng là những công nghệ không độc quyền và đã được áp dụng rộng rãi nhất. Việc áp dụng càng rộng, quán tính càng lớn đối với hầu hết mọi hình thức thay đổi. "Tiêu chuẩn" độc quyền luôn dễ bị tổn thương trước vận may và ý thích của chủ sở hữu và lực lượng cạnh tranh của họ.

Hai mươi năm là một thời gian rất dài trong ngành công nghiệp máy tính. Năm năm là một mục tiêu thực tế hơn. Trong năm năm tới, toàn bộ vấn đề mà ứng dụng của bạn muốn giải quyết có thể được xác định lại hoàn toàn.

Một vài ví dụ để minh họa:

C và C ++ đã có từ rất lâu. Họ có triển khai trên mọi nền tảng. C ++ tiếp tục phát triển, nhưng các tính năng "phổ quát" (những tính năng có sẵn trên tất cả các nền tảng) được đảm bảo khá nhiều để không bao giờ bị từ chối.

Flash gần như đã trở thành một tiêu chuẩn phổ quát, nhưng nó là độc quyền. Các quyết định của công ty không hỗ trợ nó trên các nền tảng di động phổ biến về cơ bản đã khiến nó bị hủy hoại ở mọi nơi - nếu bạn là tác giả cho web, bạn muốn nội dung của mình có sẵn trên tất cả các nền tảng; bạn không muốn bỏ lỡ thị trường di động lớn đã trở thành.

WinTel (Windows / x86) mặc dù là độc quyền của Microsoft và Intel, nhưng đã bắt đầu trên nền tảng kém tối ưu hơn (16 bit bên trong / 8 bit bên ngoài 8088 so với Apple Macintosh 32 bit bên trong / 16 bit bên ngoài 68000) và xói mòn đối với Apple trong thị trường tiêu dùng vẫn là một lựa chọn thực tế cho các nền tảng kinh doanh. Trong suốt thời gian đó (25 năm), một cam kết về khả năng tương thích ngược đã vừa phát triển trong tương lai vừa truyền cảm hứng cho sự tự tin đáng kể rằng những gì hoạt động trên hộp cũ vẫn sẽ hoạt động trên hộp mới.

Suy nghĩ cuối cùng

JavaScript có thể không phải là lựa chọn tốt nhất để triển khai logic kinh doanh. Vì lý do toàn vẹn và bảo mật dữ liệu, logic nghiệp vụ nên được thực hiện trên máy chủ, do đó, JavaScript phía máy khách nên được giới hạn ở hành vi UI. Ngay cả trên máy chủ, JavaScript có thể không phải là lựa chọn tốt nhất. Mặc dù dễ làm việc hơn các ngăn xếp khác (Java hoặc C #) cho các dự án nhỏ, nhưng nó thiếu tính hình thức có thể giúp bạn viết các giải pháp tốt hơn, có tổ chức hơn khi mọi thứ trở nên phức tạp hơn.

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.