Ketika saya mulai bekerja dengan .NET Framework 3.5 (versi bahasa 3.0) 10 tahun yang lalu, bagi saya fungsinya sangat terbatas, karena saya mulai dengan SharePoint 2010. Secara bertahap mempelajari berbagai teknologi yang lebih luas dan mengikuti perkembangan .NET, saya Saya dapat mencatat pertumbuhannya yang sangat besar dari pesaing yang meragukan ke Jawa ke platform lintas yang keren dengan kemampuan untuk mengembangkan daemon untuk Linux (dan itu ditujukan khusus untuk Windows). Tentu saja, ketika saya pertama kali menemukan teknologi, sepertinya semuanya sudah cukup: toh, ada cara untuk mengimplementasikan apa yang dimaksudkan. Tetapi sekarang, setelah memiliki pengalaman bekerja pada platform yang berbeda dan versi yang berbeda, kita sudah dapat berspekulasi bahwa hidup adalah penderitaan di masa-masa yang jauh.
Secara umum, jika menarik untuk secara mental kembali ke era itu dan merenungkan. NET bersama dalam konteks "Itu - Sudah menjadi", maka saya mengundang Anda untuk berbicara. Saya pikir ini akan menarik bagi mereka yang kode baru-baru ini dan tidak tahu tentang fitur dari versi sebelumnya, dan bagi mereka yang ingin menikmati nostalgia.

Usia Kesakitan
Ketika saya mulai mengembangkan, SharePoint 2010 bekerja pada .NET Framework 3.5 dan sudah memasukkan banyak: LINQ muncul dan ada AJAX primitif. Tapi itu sangat terbatas oleh platform, karena agak sulit untuk memperluasnya, dan tidak ada alat yang memadai saat itu.
Nyeri 1: Membuat satu aplikasiKemudian teknologi untuk mengembangkan komponen web untuk "bola" didasarkan pada WebForms, dengan masing-masing komponen web pada dasarnya merupakan aplikasi terpisah. Secara pribadi, itu tidak realistis bagi saya untuk membuat aplikasi tunggal seperti ini, karena ketika mengembangkan komponen web, masing-masing dari mereka menginisialisasi konteksnya sendiri untuk terhubung ke database - ternyata tidak mungkin membuat konteks tunggal. Sebagai contoh, untuk menampilkan data dari database di halaman, saya menggunakan SqlDataSource (dengan menghubungkan ke database di widget secara terpisah), dan untuk terhubung ke 3-4 tabel, saya memiliki 3-4 DataSource pada widget, yang, tentu saja , dipengaruhi kecepatan pemuatan halaman. Pada saat itu, Kerangka Entitas ADO.NET sudah muncul, tetapi tidak nyaman untuk menggunakannya di SharePoint hingga versi 4.1, karena ada masalah dengan interaksi produk.
Nyeri 2: Tidak dapat diaksesnya dukungan dan polaKomponen web untuk SP 2010 kami menulis tentang teknologi pembuatan komponen web SP 2007, karena tidak ada template atau dukungan untuk studio 2008. Secara bertahap, dengan rilis Visual Studio 2010, template mereka muncul, dan menjadi lebih mudah untuk bekerja: menjadi mungkin untuk membuat definisi daftar dan kode mereka dari studio, untuk membuat templat situs web (menyandikan tipe konten yang diinginkan dan deskripsi daftar). Sebelumnya, semua ini dilakukan dengan tangan melalui pengeditan file XML, dan ini, tidak diragukan lagi, sangat menyebalkan bagi mereka yang baru saja tenggelam dalam pengembangan .NET, karena orang tersebut tidak mengerti jenis file apa yang dia koreksi dan untuk tujuan apa, tetapi hanya berfokus pada Kata-kata Paman dari forum.
Nyeri 3: Asinkroni ...Di .NET Framework 3.5 tidak ada asynchrony ยฌ dalam bentuk yang kita kenal sekarang, dan kami harus menjalankan kode tertentu di utas lain, berkomunikasi melalui penangan delegasi, dan di WinForms dimungkinkan untuk menggunakan latar belakang pekerja (mis., Proses kedua berjalan secara paralel di mana pekerjaan dilakukan). Ternyata pemrograman aplikasi asinkron ada, tetapi implementasi mereka di luar pemahaman Juni.
Dalam .NET Framework 4, Pustaka Paralel Tugas muncul, dan, oleh karena itu, tugas juga muncul, mis. kami tidak dapat mendeklarasikan delegasi, tetapi melakukan tugas, menyampaikan tindakan kepadanya, dan menjalankannya secara paralel, mengetahui status / keadaan dan, bila perlu, menerima sinyal tentang implementasinya. Itu adalah kemajuan untuk pengembangan paralel, ketika Anda perlu memproses sejumlah besar data, karena sebelum itu dilakukan dengan bar entri yang lebih besar.
... dan jendela bekuAnda perlu memahami bahwa web sangat berbeda dari pengembangan aplikasi konsol (di sini kami maksudkan bukan penamaan global, tetapi yang kami gunakan saat menjelaskan tesis: tidak secara khusus ConsoleApp, tetapi semua aplikasi yang berjalan di antarmuka OS). Dalam aplikasi konsol, semua operasi dilakukan secara sinkron secara default, dan jika ada waktu pemrosesan yang lama, antarmuka akan "membeku" seolah-olah aplikasi dibekukan. Agar tidak merasa bahwa program tidak merespons, kami melakukan semua operasi di utas terpisah dan memasuki bilah kemajuan: dengan cara ini, pengguna melihat aktivitas aplikasi, dan dimungkinkan untuk mengontrol dari utas lain melalui delegasi, misalnya.
Nyeri 4: Penempatan akan DatangJuga di .NET Framework 3.5 ada teknologi menyakitkan lainnya - MS AJAX. Konten UpdatePanel diperbarui dari backend, sementara yang lainnya tidak dibangun kembali sama sekali. Di SharePoint, ia bekerja sangat bengkok karena spesifikasi menginisialisasi kontrol dalam siklus hidup halaman. Di sini ia bekerja untuk kami setelah post-back pertama (kadang-kadang setelah yang kedua), dan secara umum sulit untuk membuat MS AJAX bekerja dengan baik pertama kali, meskipun itu digunakan cukup sederhana dengan WebForm UpdatePannel yang bersih. Dan itu tidak mungkin untuk menggunakan AJAX klasik (XMLHttpRequest) dalam versi "bola", karena untuk setiap tindakan itu perlu untuk menulis handler terpisah di bagian belakang dan menggantungnya di paket setiap bagian web. Pada saat yang sama, tidak selalu memungkinkan untuk mengakhiri fungsi ini.
Ketika secara paralel saya bekerja dengan aplikasi lain yang ditulis di WebForms untuk tugas "bola dekat", saya terkejut bahwa masalah penggelaran proyek ke SP adalah masalah hanya untuk SP. Sisa aplikasi diinisialisasi saat ini: jendela dimuat, dan berfungsi (ajaib!). Dalam balon, penyebaran membutuhkan waktu 2 hingga 3 menit, dan Anda berada dalam siklus yang konstan:

Secara umum, semua orang mengerti bahwa itu adalah proses panjang penyebaran dan istirahat kecil. Tetapi saya bersyukur atas rasa sakit ini - jadi saya belajar menghasilkan lebih banyak kode dan membuat lebih sedikit kesalahan dalam satu iterasi pembangunan.
Nyeri 5: Windows dan hanya WindowsPada saat itu, .NET masih memposisikan dirinya sebagai platform pengembangan untuk Windows. Ya, ada proyek Mono, yang, pada dasarnya, adalah "sepeda" dari .NET di Linux, tapi itu adalah versi alternatif dari Kerangka utama, dan masih di halaman proyek
www.mono-project.com/docs/ about-mono / kompatibilitas ) daftar fitur yang tidak ditambahkan oleh versi Kerangka. Ketika Anda mengembangkan sesuatu untuk Linux, itu jauh dari ramah pengguna, karena Mono tidak memiliki dukungan dan komunitas, dan jika Anda beralih ke beberapa hal yang tidak direalisasi, maka kodenya bisa saja rusak. Artinya, jika Anda tidak mengembangkannya untuk Mono pada awalnya, Anda tidak bisa menulis kode platform-independent pada prinsipnya. Saya tidak mengesampingkan pentingnya proyek ini untuk pengembangan .NET secara keseluruhan, karena tanpanya Core tidak akan muncul, tetapi secara pribadi, saya tidak memiliki pengalaman tempur dengannya.
Age of Pros (Painkiller)Penggunaan murni .NET versi terbaru dalam proyek mereka menghilangkan hampir semua masalah ini. Ada banyak plus dalam Kerangka sekarang, tapi kemudian kita akan berbicara tentang keuntungan dengan mengikat ke Core, sebagai Saya bekerja dengannya.
Plus 1: KinerjaKetika .NET Core muncul, menjadi mungkin untuk melakukan operasi yang sudah dikenal jauh lebih dingin dan lebih cepat. Aplikasi terakhir di dalamnya berfungsi menurut beberapa data hingga 5000 kali lebih cepat daripada rekan-rekan mereka di .NET Framework. Tetapi kompilasi dan peluncuran terkadang membutuhkan waktu lebih lama - "harness for a time - drive fast."
Plus 2: Lintas-platformKelebihan utama dari .NET Core adalah fakta bahwa kode tertulis bekerja secara bersamaan pada Windows, Linux dan Mac. Dalam hal ini, Anda dapat menulis aplikasi pada arsitektur microservice dari layanan logging asynchronous melalui antrian pesan. Saya ingat bagaimana saya, seorang pengembang yang menulis terutama di bawah Windows, menulis setan (layanan) di Linux, dan mereka bekerja secara stabil, cepat dan pertama kali, dan seluruh sistem bekerja bersama-sama: dalam aplikasi, layanan API dan antrian pesan itu sendiri. Ini hanya ruang, ketika Anda menulis dalam bahasa biasa di platform yang awalnya tidak dirancang untuk OS ini!
Plus 3: Async segalanyaSekarang dimungkinkan untuk membuat backing tidak secara paralel, tidak multithreaded, tetapi sepenuhnya asynchronous (!), Yang memungkinkan Anda untuk menghapus tugas individu dari aliran utama ke metode asinkron khusus atau blok kode. Ini, pada gilirannya, memungkinkan Anda untuk menulis kode yang indah dan bersih, yang tanpa konstruksi besar: mudah dimengerti, metode asinkron ditulis sebagai sinkron, dan berfungsi sebagaimana mestinya.
Plus 4: Bongkar perpustakaan dan konsumsi memori yang kurang intensifJika Anda melihat versi 8 C # saat ini, maka ia memiliki banyak gula, dan perubahannya sangat menarik. Pertama, sebelum kami tidak memiliki kemampuan untuk secara dinamis membongkar DLL yang awalnya tidak dibongkar (kami secara dinamis memuat pustaka ke dalam proyek, tetapi mereka tetap menggantung dalam memori). Dengan dirilisnya Core 3, menjadi mungkin untuk memuat dan membongkar perpustakaan secara dinamis tergantung pada tujuannya. Misalnya, jika kami ingin membuat aplikasi pencarian file, dan pengguna memilih ekstensi XML, kami secara dinamis memuat parser XML untuk dokumen dan mencari di pohonnya. Jika kita ingin mencari dengan JSON, maka kita mulai mencari berdasarkan isi tubuhnya - pustaka yang tergantung pada kondisi tertentu, dan tidak perlu menyimpannya di RAM. Dan ya. Aplikasi telah berhenti mengkonsumsi memori secara konstan. Saat kami membongkar rakitan, kami membebaskan semua sumber daya yang melekat pada rakitan ini.
Plus 5: tupelBahasanya masih muda, bersemangat dan aktif berkembang. Versi terbaru menambahkan banyak hal keren: misalnya, tuple adalah topik aktif. Ya, ada tuple sebelumnya, tetapi sebagai kelas yang terpisah, yang mencakup banyak elemen. Sekarang telah diubah menjadi tupel, ketika kita dapat membuat metode yang mengembalikan bukan 1 objek, tetapi beberapa. Sebelumnya, untuk mengembalikan lebih dari 1 parameter, perlu bahwa parameter keluaran / referensi dideklarasikan, atau untuk menciptakan kelas yang terpisah dan seret lebih jauh, tetapi sekarang Anda dapat mengembalikannya sebagai tupel.
Untuk meringkas!Banyak pengembang memiliki sikap terhadap perubahan bahasa: sampai kami selesai dengan baik, kami tidak tahu apa yang buruk. .NET Core adalah sumber terbuka, jadi siapa pun dapat menambahkan fitur sendiri, dan menulis tentang rasa sakit mereka di portal. Tentu saja ada banyak masalah kontroversial: seseorang menunggu perubahan yang tampaknya benar-benar tidak nyaman bagi orang lain. Misalnya, versi 8 bahasa termasuk kontrol jenis Referensi Nullable, dan sejauh ini pertanyaan kenyamanan masih kontroversial: inovasi diumumkan dalam 2 versi sebelumnya, dan hanya disertakan dalam Core 3.0 final, dan secara default fitur ini dinonaktifkan, karena penyertaannya dapat menyebabkan untuk rincian proyek besar. Tetapi ketika menulis aplikasi dari awal, ini sangat berguna dan memungkinkan Anda untuk membuat aplikasi lebih bersih dan transparan.
Menurut pendapat saya, platform yang sekarang sudah menjadi pemain yang kuat di dunia pengembangan dengan ambang masuk yang cukup rendah (bahkan ada yang lebih rendah, tetapi mengerjakannya lebih sulit). Tentu saja, memilih platform berarti bekerja dengan sejumlah faktor dan bergantung pada tujuan. Jika ini adalah aplikasi kompleks yang memproses data terabyte dan perlu diverifikasi sebelum byte, maka ini adalah pemrograman yang rumit pada plus. Tetapi Anda perlu memahami bahwa ini adalah setengah tahun untuk pengembangan dan dua untuk revisi, dan pada saat dirilis akan menjadi usang. Selain itu, tidak banyak orang yang memberi kode plus. Jika kita berbicara tentang pengembangan perusahaan, ketika waktu untuk rilis adalah 2 minggu, maka masuk akal untuk memilih teknologi lain yang membantu untuk mendapatkan hasil yang lebih cepat (Java, .NET, php).