Saat ini saya sedang mengembangkan aplikasi web untuk perencanaan pertanahan pemerintah. Aplikasi sebagian besar berjalan di browser, menggunakan ajax untuk memuat dan menyimpan data.
Saya akan melakukan pengembangan awal, dan kemudian lulus (ini adalah pekerjaan siswa). Setelah ini, anggota tim lainnya akan menambahkan fitur sesekali sesuai kebutuhan. Mereka tahu cara membuat kode, tetapi mereka kebanyakan ahli perencanaan lahan.
Mempertimbangkan kecepatan perubahan teknologi Javascript, bagaimana saya bisa menulis kode yang masih berfungsi 20 tahun dari sekarang? Secara khusus, perpustakaan, teknologi, dan ide-ide desain mana yang harus saya gunakan (atau hindari) untuk membuktikan kode saya di masa mendatang?
Jawaban:
Merencanakan perangkat lunak untuk masa hidup seperti itu sulit, karena kita tidak tahu apa yang akan terjadi di masa depan. Sedikit konteks: Jawa diterbitkan tahun 1995, 21 tahun yang lalu. XmlHttpRequest pertama kali tersedia sebagai ekstensi berpemilik untuk Internet Explorer 5, diterbitkan 1999, 17 tahun yang lalu. Butuh waktu sekitar 5 tahun hingga tersedia di semua browser utama. 20 tahun yang Anda coba lihat ke depan sudah saatnya aplikasi web kaya telah ada.
Beberapa hal pasti tetap sama sejak itu. Telah ada upaya standardisasi yang kuat, dan sebagian besar browser sesuai dengan berbagai standar yang terlibat. Situs web yang bekerja lintas browser 15 tahun yang lalu masih akan berfungsi sama, asalkan berfungsi karena menargetkan subset umum dari semua browser, bukan karena menggunakan solusi untuk setiap browser.
Hal-hal lain datang dan pergi - yang paling mencolok adalah Flash. Flash memiliki berbagai masalah yang menyebabkan kematiannya. Yang paling penting, itu dikendalikan oleh satu perusahaan. Alih-alih persaingan di dalam platform Flash, ada persaingan antara Flash dan HTML5 - dan HTML5 menang.
Dari sejarah ini, kita dapat mengumpulkan beberapa petunjuk:
Tetap sederhana: Lakukan apa yang berfungsi sekarang, tanpa harus menggunakan solusi apa pun. Perilaku ini kemungkinan akan tetap tersedia lama di masa depan karena alasan kompatibilitas ke belakang.
Hindari mengandalkan teknologi eksklusif, dan lebih suka standar terbuka.
Dunia JavaScript saat ini relatif tidak stabil dengan fluktuasi perpustakaan dan kerangka kerja yang tinggi. Namun, hampir tidak satu pun dari mereka akan berarti dalam 20 tahun - satu-satunya "kerangka kerja" saya yakin yang masih akan digunakan saat itu adalah Vanilla JS .
Jika Anda ingin menggunakan perpustakaan atau alat karena itu benar-benar membuat pengembangan jauh lebih mudah, pertama pastikan bahwa itu dibangun di atas standar yang didukung dengan baik saat ini. Anda kemudian harus mengunduh perpustakaan atau alat dan memasukkannya dengan kode sumber Anda. Repositori kode Anda harus menyertakan semua yang diperlukan untuk menjalankan sistem. Apa pun eksternal adalah ketergantungan yang bisa pecah di masa depan. Cara yang menarik untuk menguji ini adalah menyalin kode Anda ke thumb drive, pergi ke komputer baru dengan sistem operasi yang berbeda, lepaskan dari internet, dan lihat apakah Anda dapat membuat frontend Anda berfungsi. Selama proyek Anda terdiri dari HTML + CSS + JavaScript polos plus mungkin beberapa perpustakaan, Anda mungkin akan lulus.
sumber
Apa yang lebih penting daripada kode Anda bertahan selama 20 tahun adalah bahwa data Anda bertahan selama 20 tahun. Kemungkinannya, itulah hal yang patut dipertahankan. Jika data Anda mudah dikerjakan, membangun sistem alternatif di atasnya dengan teknologi yang lebih baru akan mudah.
Setelah Anda memilikinya, pemeriksaan di masa depan aplikasi itu sendiri lebih sederhana, karena itu adalah pembungkus model data, dan dapat diganti jika, dalam 10 tahun, tidak ada yang menggunakan Javascript lagi, misalnya, dan Anda perlu melakukan migrasi aplikasi ke WASM atau apalah. Menjaga hal-hal menjadi modular, tidak saling tergantung, memungkinkan pemeliharaan yang lebih mudah di masa depan.
[1] Sebagian besar komentar untuk jawaban ini sangat menentang penggunaan Oracle untuk DB, dengan mengutip banyak alasan sah mengapa Oracle sulit digunakan, memiliki kurva pembelajaran yang curam dan overhead pemasangan. Ini adalah kekhawatiran yang sepenuhnya sahih ketika memilih Oracle sebagai DB, tetapi dalam kasus kami, kami tidak mencari DB untuk tujuan umum, tetapi yang menjadi perhatian utama adalah pemeliharaan . Oracle telah ada sejak akhir 70-an dan kemungkinan akan didukung selama bertahun-tahun yang akan datang, dan ada ekosistem besar konsultan dan opsi dukungan yang dapat membantu Anda tetap berjalan. Apakah ini kekacauan yang terlalu mahal bagi banyak perusahaan? Tentu. Tapi apakah itu akan membuat database Anda berjalan selama 20 tahun ? Sepertinya.
sumber
Jawaban sebelumnya oleh Amon bagus, tetapi ada dua poin tambahan yang tidak disebutkan:
Ini bukan hanya tentang browser; perangkat juga penting.
amon menyebutkan fakta bahwa "situs web yang bekerja di browser 15 tahun yang lalu masih akan berfungsi sama" , yang benar. Namun, lihat situs web yang dibuat bukan lima belas, tetapi sepuluh tahun lalu, yang, ketika dibuat, berfungsi di sebagian besar browser untuk sebagian besar pengguna. Saat ini, sebagian besar pengguna tidak akan dapat menggunakan situs web itu sama sekali, bukan karena browser berubah, tetapi karena perangkat melakukannya. Situs web itu akan terlihat mengerikan di layar kecil perangkat seluler , dan akhirnya tidak berfungsi sama sekali jika pengembang memutuskan untuk mengandalkan
click
acara JavaScript , tanpa mengetahui bahwatap
acara itu juga penting.Anda fokus pada subjek yang salah.
Perubahan teknologi adalah satu hal, tetapi yang lebih penting adalah perubahan persyaratan . Produk mungkin perlu diskalakan, atau mungkin perlu memiliki fitur tambahan, atau mungkin perlu fitur saat ini diubah.
Tidak masalah apa yang akan terjadi pada browser, atau perangkat, atau W3C, atau ... apa pun.
Jika Anda menulis kode Anda sedemikian rupa sehingga dapat di refactored , produk akan berkembang dengan teknologi.
Jika Anda menulis kode dengan cara yang tidak dapat dipahami dan dipelihara oleh siapa pun, teknologi tidak masalah: perubahan lingkungan apa pun akan menurunkan aplikasi Anda, seperti migrasi ke sistem operasi yang berbeda, atau bahkan hal sederhana seperti pertumbuhan data alami .
Sebagai contoh, saya bekerja dalam pengembangan perangkat lunak selama sepuluh tahun. Di antara lusinan proyek, hanya ada dua yang saya putuskan untuk berubah karena teknologi , lebih tepatnya karena PHP banyak berkembang selama sepuluh tahun terakhir. Itu bahkan bukan keputusan pelanggan: dia tidak akan peduli jika situs menggunakan ruang nama PHP atau penutupan. Namun, perubahan terkait dengan persyaratan dan skalabilitas baru, ada banyak!
sumber
Anda tidak berencana untuk bertahan 20 tahun. Polos dan sederhana. Alih-alih, Anda menggeser sasaran ke kompartementalisasi.
Apakah basis data aplikasi Anda agnostik? Jika Anda harus beralih basis data sekarang, bisakah Anda. Apakah bahasa logika Anda agnostik. Jika Anda harus menulis ulang aplikasi dalam bahasa yang sama sekali baru sekarang, bisakah Anda? Apakah Anda mengikuti pedoman desain yang baik seperti SRP dan KERING?
Saya telah memiliki proyek yang hidup lebih dari 20 tahun, dan saya dapat memberitahu Anda bahwa semuanya berubah. Seperti pop-up. 20 Tahun yang lalu Anda bisa mengandalkan pop-up, hari ini Anda tidak bisa. XSS bukan hal 20 tahun yang lalu, sekarang Anda harus memperhitungkan CORS.
Jadi yang Anda lakukan adalah memastikan logika Anda terpisah dengan baik, dan Anda menghindari penggunaan teknologi APA SAJA yang mengunci Anda ke vendor tertentu.
Ini terkadang sangat sulit. .NET misalnya sangat bagus dalam mengungkap logika dan metode untuk adaptor basis data MSSQL yang tidak memiliki padanan dalam adaptor lain. MSSQL mungkin tampak seperti rencana yang bagus hari ini tetapi apakah akan tetap demikian selama 20 tahun? Siapa tahu. Contoh cara menyiasatinya agar memiliki lapisan data yang benar-benar terpisah dari bagian lain aplikasi. Kemudian, kasus terburuk, Anda hanya perlu menulis ulang seluruh lapisan data, sisa aplikasi Anda tetap tidak terpengaruh.
Dengan kata lain pikirkan itu seperti mobil. Mobil Anda tidak akan membuatnya 20 tahun. Tapi, dengan ban baru, mesin baru, transmisi baru, jendela baru, elektronik baru, dll. Mobil yang sama itu bisa berada di jalan untuk waktu yang sangat lama.
sumber
Jawaban oleh @amon dan beberapa yang lain bagus, tapi saya ingin menyarankan Anda melihat ini dari sudut pandang lain.
Saya telah bekerja dengan Produsen Besar dan Instansi Pemerintah yang mengandalkan program atau basis kode yang telah digunakan selama lebih dari 20 tahun, dan mereka semua memiliki satu kesamaan - perusahaan mengendalikan perangkat keras. Memiliki sesuatu yang berjalan dan dapat diperpanjang selama 20+ tahun tidak sulit ketika Anda mengontrol apa yang berjalan. Karyawan di kelompok-kelompok ini mengembangkan kode pada mesin modern yang ratusan kali lebih cepat daripada mesin penempatan ... tetapi mesin penempatan dibekukan dalam waktu.
Situasi Anda rumit, karena situs web berarti Anda perlu merencanakan dua lingkungan - server dan browser.
Ketika datang ke server, Anda memiliki dua pilihan umum:
Mengandalkan sistem operasi untuk berbagai fungsi pendukung yang mungkin jauh lebih cepat, tetapi berarti OS mungkin perlu "dibekukan dalam waktu". Jika demikian, Anda harus menyiapkan beberapa cadangan instalasi OS untuk server. Jika terjadi crash dalam 10 tahun, Anda tidak ingin membuat orang menjadi gila mencoba menginstal ulang OS atau menulis ulang kode untuk bekerja di lingkungan yang berbeda.
Gunakan pustaka berversi dalam bahasa / kerangka kerja tertentu, yang lebih lambat, tetapi dapat dikemas dalam lingkungan virtual dan kemungkinan dijalankan pada sistem operasi atau arsitektur yang berbeda.
Ketika datang ke browser, Anda harus meng-host semua yang ada di server (mis. Anda tidak dapat menggunakan CDN global untuk meng-host file). Kami dapat berasumsi bahwa browser masa depan masih akan menjalankan HTML dan Javascript (setidaknya untuk kompatibilitas), tetapi itu benar-benar dugaan / asumsi dan Anda tidak dapat mengendalikannya.
sumber
Inti dari sebagian besar aplikasi adalah data. Data selamanya. Kode lebih dapat dibuang , diubah, dapat ditempa. Namun, data harus disimpan. Jadi fokuslah untuk membuat model data yang benar-benar solid. Jaga skema dan data tetap bersih. Mengantisipasi, bahwa aplikasi baru dapat dibangun di atas database yang sama.
Pilih database yang mampu menegakkan batasan integritas. Kendala yang tidak dipaksakan cenderung dilanggar seiring berjalannya waktu. Tidak ada yang tahu. Manfaatkan fasilitas secara maksimal seperti kunci asing, kendala unik, periksa kendala, dan mungkin pemicu untuk validasi. Ada beberapa trik untuk menyalahgunakan pandangan yang diindeks untuk menegakkan batasan keunikan lintas-tabel.
Jadi mungkin Anda perlu menerima bahwa aplikasi akan ditulis ulang pada suatu waktu. Jika database bersih, akan ada sedikit pekerjaan migrasi. Migrasi sangat mahal dalam hal tenaga kerja dan cacat yang disebabkan.
Dari perspektif teknologi mungkin ide yang baik untuk menempatkan sebagian besar aplikasi di server dan bukan dalam bentuk JavaScript pada klien. Anda mungkin dapat menjalankan aplikasi yang sama dalam instance OS yang sama untuk waktu yang sangat lama berkat virtualisasi . Itu tidak terlalu bagus tapi itu jaminan aplikasi akan bekerja 20 tahun dari sekarang tanpa biaya pemeliharaan dan perangkat keras yang mahal. Dengan melakukan ini, Anda setidaknya memiliki fallback aman dan murah untuk terus menjalankan kode lama yang berfungsi.
Juga, saya menemukan bahwa beberapa tumpukan teknologi lebih stabil daripada yang lain . Saya akan mengatakan bahwa .NET memiliki kisah kompatibilitas mundur terbaik saat ini. Microsoft sangat serius tentang hal itu. Java dan C / C ++ juga sangat stabil. Python telah membuktikan bahwa itu sangat tidak stabil dengan Python 3 melanggar perubahan. Sebenarnya JavaScript tampaknya cukup stabil bagi saya karena memecah web bukanlah opsi untuk vendor browser mana pun. Anda mungkin sebaiknya tidak mengandalkan apa pun yang eksperimental atau funky. ("Funky" didefinisikan sebagai "Saya tahu ketika saya melihatnya").
sumber
Jawaban lain masuk akal. Namun, saya merasa komentar pada teknologi klien lebih rumit. Saya telah bekerja sebagai pengembang selama 16 tahun terakhir. Dalam pengalaman saya, selama Anda menjaga kode klien Anda intuitif, Anda harus baik-baik saja. Jadi tidak ada "retasan" dengan bingkai / iframe, dll. Hanya gunakan fungsi yang didefinisikan dengan baik di browser.
Anda selalu dapat menggunakan mode kompatibilitas di browser agar tetap berfungsi.
Untuk membuktikan maksud saya, hanya beberapa bulan yang lalu saya memperbaiki bug milenium dalam kode javascript untuk pelanggan, yang telah menjalankan aplikasi web mereka selama 17 tahun. Masih berfungsi pada mesin terbaru, basis data terkini, sistem operasi terbaru.
Kesimpulan: tetap sederhana dan bersih dan Anda harus baik-baik saja.
sumber
Beberapa aksioma:
Teknologi dan standar paling stabil (yang paling tidak rentan terhadap keusangan) cenderung adalah yang tidak berpemilik dan telah diadopsi secara luas. Semakin luas adopsi, semakin besar inersia terhadap hampir semua bentuk perubahan. "Standar" hak milik selalu rentan terhadap nasib dan keinginan pemiliknya dan kekuatan kompetitifnya.
Dua puluh tahun adalah waktu yang sangat lama di industri komputer. Lima tahun adalah target yang lebih realistis. Dalam waktu lima tahun, seluruh masalah yang ingin diselesaikan oleh aplikasi Anda dapat sepenuhnya didefinisikan ulang.
Beberapa contoh untuk menggambarkan:
C dan C ++ sudah ada sejak lama. Mereka memiliki implementasi di hampir semua platform. C ++ terus berkembang, tetapi fitur "universal" (yang tersedia di semua platform) dijamin tidak akan pernah ditinggalkan.
Flash hampir menjadi standar universal, tetapi ini adalah hak milik. Keputusan perusahaan untuk tidak mendukungnya di platform seluler populer pada dasarnya telah membinasakannya di mana saja - jika Anda membuat situs web, Anda ingin konten Anda tersedia di semua platform; Anda tidak ingin ketinggalan pasar seluler utama.
WinTel (Windows / x86) meskipun milik Microsoft dan Intel, setelah dimulai pada platform yang kurang optimal (internal 16 bit / 8 bit eksternal 8088 vs Apple Macintosh kontemporer 32 bit internal / 16 bit eksternal 68000), dan erosi untuk Apple di pasar konsumen tetap menjadi pilihan de facto untuk platform bisnis. Dalam semua waktu (25 tahun), komitmen terhadap kompatibilitas ke belakang telah menghambat pembangunan di masa depan dan menginspirasi keyakinan yang cukup besar bahwa apa yang bekerja pada kotak lama akan tetap bekerja pada yang baru.
Pikiran terakhir
JavaScript mungkin bukan pilihan terbaik untuk menerapkan logika bisnis. Untuk alasan integritas dan keamanan data, logika bisnis harus dilakukan di server, sehingga JavaScript sisi klien harus dibatasi untuk perilaku UI. Bahkan di server, JavaScript mungkin bukan pilihan terbaik. Meskipun lebih mudah untuk dikerjakan daripada tumpukan lain (Java atau C #) untuk proyek-proyek kecil, itu tidak memiliki formalitas yang dapat membantu Anda menulis solusi yang lebih baik, lebih terorganisir ketika semuanya menjadi lebih kompleks.
sumber