Pernahkah kamu menghadapi masalah saat harus mengkonfigurasi ulang setiap kali membuat proyek baru dalam pengembangan web? Jika iya, jangan khawatir! Di artikel ini, kita akan menemukan solusi yang praktis dan efisien untuk mengatasi masalah tersebut. Kami akan membahas cara membuat template .NET yang telah terkonfigurasi sebelumnya, sehingga kamu tidak perlu lagi repot melakukan konfigurasi awal yang sama setiap kali memulai proyek baru.
Dalam artikel ini, kamu akan menemukan langkah-langkah yang mudah untuk membuat template .NET yang telah disesuaikan dengan konfigurasi umum yang biasa digunakan dalam pengembangan web. Template ini dirancang dengan mengimplementasikan clean architecture, sebuah pendekatan desain yang terkenal untuk membangun aplikasi yang terstruktur dan mudah dikelola.
Dahulu sebelum saya mengenal tools version control, saya terbiasa menggunakan tool semacam filezilla untuk melakukan file transfer dari komputer (local) ke server, tetapi tools ini ada beberapa kekurangan, diataranya tidak ada nya fitur untuk melakukan rollback saat kode baru yang terupdate ternyata memiliki bug dan kita mencoba untuk mengembalikan ke update sebelumnya, untuk melakukan hal ini sebelumnya saya harus melakukan backup secara manual.
selain itu untuk melakukan kolaborasi kita tidak bisa melakukan tracking tiap ada update baru entah itu yang kita lakukan sendiri atau orang lain di team kita yang melakukan update, kita hanya bisa menebak atau mengaku telah melakukan update di beberapa file.
Github mengeluarkan salah satu produknya AI yang sangat powerfull bernama GitHub Copilot, dengan tagline nya “Your AI Programmer” tools ini bisa memberikan suggestion kepada kita untuk menyelesaikan sebuah problem, hanya dengan mengetikkan sebuah komentar saja nantinya Github Copilot ini dapat memberikan sampai sepuluh rekomendasi, bahkan untuk dapat menyelesaikan algoritma struktur daya yang rumit sekalipun, untuk support bahasa pemrogramannya saya mengutip di websitenya begini
“GitHub Copilot works with a broad set of frameworks and languages. The technical preview does especially well for Python, JavaScript, TypeScript, Ruby, Java, and Go, but it understands dozens of languages and can help you find your way around almost anything.”
Karena untuk sekarang statusnya masih technical review, buat yang ingin menjadi tester GitHub Copilot ini dapat mengajukanya di https://copilot.github.com/ kurang lebih sekitar 4-5 bulan nanti akan mendapatkan email persetujuan dari GitHub seperti ini
MVC (Model-View-Controller) adalah salah satu architecture pattern yang menjadi base dari projek baru dari iOS. Saya cukup yakin jika semua iOS developer tentunya tahu dengan pattern ini. Secara umum MVC terdiri 3 komponen yaitu:
Model Komponen atau layer ini berisi data model aplikasi, networking service, data persistence dll. Intinya komponen ini berisi logik yang berhubungan data yang ada pada aplikasi kita.
View Untuk komponen ini sendiri pastinya kita sudah tahu yaitu Storyboard yang berfungsi untuk membuat view dari aplikasi kita.
Controller Komponen ini biasanya kita sebut dengan ViewController, yang berfungsi menjadi jembatan antara model dan view. Di mana controller ini bertugas untuk memanggil data dan mengupdatenya ke dalam view, atau mengirim sebuah respon atau action ketika view seperti button, textfield dll mengalami perubahaan state.
Problem
Untuk architecture ini sendiri menurut saya sangat cocok untuk aplikasi yang masih sederhana, namun kenyataannya implementasi yang ada masih salah. Biasanya dalam project yang ada, kita selalu menempatkan semua logic yang ada dalam ViewController bukan? Biasanya untuk melakukan fetching data, maka kita memanggil Singleton ke dalam ViewController yang ada. Sehingga yang ada bukanlah MVC(Model-View-Controller), melainkan Massive View Controller.
Beberapa masalah yang terjadi:
Menyalahi aturan Single Responsibility Principle di mana ViewController menghandle terlalu banyak operasi, ViewController seharusnya hanya bertugas untuk memanggil dan melakukan update.
ViewController seharusnya tidak mengetahui implementasi detail dari operasi tersebut, dalam kasus ini kita telah menyalahi aturan dari Dependency Inversion Principle, “Module shoud not depend on Detail/Implementation (Concrete Class), it should depend on abstraction”. Dengan menyalahi aturan tersebut, class ViewController menjadi Tighly Couple dengan Singleton yang ada, dan menyebabkan kode yang ada susah untuk ditest.
Nah untuk mengatasi hal tersebut tidaklah susah, kita cukup memanfaatkan Dependency Injection dan mengikuti aturan Dependency Inversion. Ayo kita langsung hands-on aja.
Silahkan membuka branch Main, aplikasi ini ialah aplikasi sederhana yang memuat games dari API dan menampilkannya pada tableview yang ada. Struktur kode tersebut merupakan struktur kode yang sering kita lihat dalam beberapa project. Secara sekilas struktur kode yang ada sudah cukup rapi, namun masih dapat dikembangkan. Dalam kode ini, ViewController masih bergantung pada class NetworkService, sehingga ketika membuat test kita harus menguji implementasi yang asli (memanggil data langsung) yang biasanya memakan waktu cukup lama, padahal sebuah UnitTesting harus berjalan dengan cepat.
1. Mendefine sebuah Protocol
Membuat sebuah protocol, nantinya ViewController akan bergantung pada protocol ini (abstraction), bukan class NetworkService(Concrete Type) secara langsung.
2. Membuat class yang akan mengimplementasi protocol tersebut
Sekarang kode pada fungsi getAllGames pada class ViewController dapat dipindahkan ke dalam class GameImplementation ini.
3. Refactor kode pada class ViewController
Menambah sebuah dependency yaitu GameProtocol(Abstraction) tersebut dan menghandle completion dari fungsi getAllGames
Unit Test
Dengan membuat kode kita menjadi seperti ini, maka kita akan dapat melakukan test dengan mudah dan cepat.
1. Membuat Mock Object
Dengan membuat mock object, kita tidak perlu lagi melakukan test dengan real APICall. Kita dapat membuat data dummy kita sendiri
2. Write Unit Test
Karena ViewController bergantung dengan abstraction, kita dapat dengan mudah untuk mengganti dependency yang ada. Di sini kita tidak lagi menggunakan class GameImplementation, melainkan MockGameImplementation yang berisi data dummy kita.
Kesimpulan
Dengan membuat kode seperti ini, kita dapat membuat class/kode memiliki ruang untuk bernafas yaitu tidak bergantung pada class tertentu (Loose Coupling). Unit Test yang ditulis dapat dijalankan dengan cepat dan secara offline. Jika kita mengetest dengan memanggil API Call secara langsung, maka beberapa masalah yang dapat terjadi ialah:
Masalah Internet yang sangat mempengaruhi kecepatan Unit Testing kita, sehingga hasil yang ada tidak konsisten. Apalagi jika kita berada di jangkauan yang tidak memiliki sinyal internet, maka kita tidak dapat melakuakan test. Test yang ada juga relative cepat yaitu hanya memerlukan waktu sekitar 0.1 detik, jika dibandingkan dengan ApiCall yang asli maka akan membutuhkan waktu beberapa detik.
Kendala terhadap API Call limit pada beberapa API, sehingga akan menghambat proses development yang ada
Untuk melihat hasil akhir, Anda bisa checkout ke dalam branch Final. Semoga dapat memberikan insight baru dan dapat bermanfaat bagi teman-teman.
Saat ngoding kita tentu harus menguji kodingan kita terlebih dahulu agar kita bisa tau kodingan kita benar atau error. tidak terkecuali saat ngoding aplikasi Android. mungkin kebanyakan dari kita melakukan pengujian aplikasi Android secara manual dengan melakukan prosedur yang telah kita tentukan secara berulang ulang, hal ini sebenarnya cukup melelahkan dan seringkali membuat kita jenuh.
Hai gaes pasti kalian sudah familiar kan dengan API itu apa? Jadi secara singkatnya API itu adalah seperangkat aplikasi yang bisa berbentuk fungsi, method atau URL endpoint yang dapat kita gunakan untuk mengembangkan aplikasi, baik dalam satu platform maupun lintas platform.
Terus mocha dan chai ini apa sama? jadi gini mocha itu adalah javascript library testing dan Chai sendiri adalah library yang digunakan untuk memudahkan Mocha dalam melakukan assertion pada setiap API yang dipanggil. Nah gimana udah paham kan? sekarang kita eksekusi yok gimana cara pakai mocha dan chai nya.
Persiapan
Pastikan kalian sudah menginstal nodejs, jika belum terinstall silakan install dulu disini!
Pertama kali saya terjun di dunia kerja langsung menghadapi banyak materi yang asing. Namun materi pertama dan selalu saya gunakan sampai sekarang adalah suatu proses menjalankan aplikasi dan proses jalannya secara client dan server side, hal utama yang menurut saya perlu dipelajari adalah Synchronus dan Asynchronus. Materi ini menurut saya sangat diperlukan untuk dasar pemrograman (walaupun saat kuliah tidak pernah ada :3). Walaupun secara tidak langsung hampir semua Web Developers menggunakannya namun perlu Pengetahuan lebih dalam karena proses ini sederhana dan berdampak ke semua aspek kehidupan program Anda.
Apakah yang di maksud dengan Synchronouse?
Synchronous adalah proses jalannya program secara sequential , disini yang dimaksud sequential ada berdasarkan antrian ekseskusi program. Pada dasarnya semua Bahasa pemrograman menggunakan Asynchronouse terutama PHP.
Cotoh Synchronous di Bahasa Perograman PHP:
beri nama file synchronous.php
<?php
$now = date(‘Y-m-d’);
// antrian 1
echo$now.‘ |’;
$yesterday = date(‘Y-m-d’,strtotime(‘-1 days’));
// antrian 2
echo$yesterday.‘ |’;
$week = date(‘Y-m-d’,strtotime(‘-1 week’));
// antrian 3
echo$week.‘ |’;
?>
Hasil Eksekusi:
Penjelasan: Pada saat file synchronouse.php dieksekusi maka proses nya adalah membaca antrian 1 terlebih dahulu kemudian antrian 2 dan terakhir adalah antrian 3.
Apakah yang dimaksud dengan Asynchronous?
Asynchronous adalah proses jalannya program bisa dilakukan secara bersamaan tanpa harus menunggu proses antrian. Synchronous merupakan bagian dari Asynchronous (1 antrian) dimana proses akan dieksekusi secara bersamaan dan untuk hasil tergantung lama proses suatu fungsi synchronous . Asynchronouse hampir disemua Bahasa pemrograman ada namun untuk PHP masih belum ada. PHP sebagai server side hanya menyediakan synchronous namun bisanya di WEB Developers tetap digunakan namun menggunakan AJAX (Asynchronous Javascript And XML) untuk proses Asynchronouse.
Penjelasan: Counter Nilai terus berjalan tanpa ada antrian.
Berikut Source Code Link Gitlab apabila anda ingin mencoba: Link
Contoh Asynchronous di NODE JS
Di artikel saya sebelumnya pernah membahas chat menggunakan Socket.io dimana basic dari Realtime Chat dengan socket.IO ada Synchronous. Silahkan lihat di Artikel saya berikut : Realtime Chat dengan Html, Javascript dan Socket.io
Berikut Link Artikel untuk mempelajari Asynchronous di beberapa Bahasa pemrograman:
Note: Synchronous dan Asynchronous saling berkisambungan jadi apabila anda ingin lebih detail bisa Anda pahami lebih dalam. Kegunakan juga sesuai kebutuhan.
Realtime Chat atau Realtime Data sering disebut dalam dunia programing adalah suatu hal akan sering digunakan dan sangat diperlukan. Dalam kesempatan ini kita akan membahas dan langsung mem praktik kan Realtime Data dengan Chat App.
Senjata yang akan kita gunakan adalah:
1. HTML
Sebuah bahasa markah yang digunakan untuk membuat sebuah halaman web. Platform umum yang sering digunakan sehingga akan mudah untuk di praktik kan.
2. Javascript
Javascript adalah bahasa pemrograman tingkat tinggi dan dinamis. JavaScript biasanya digunakan untuk olah data secara Client ke server namun juga bisa sebagai server ke client. Disini Javascript akan berfungsi GET POST data dari client atau HTML.
3. Socket.io
Apa itu Socket.Io? Socket.io ada suatu library dari Node.JS yang berfungsi untuk menjembatani realtime data, Namun jangan salah socket.io tidak hanya bisa digunakan di Node.js. Socket.io bisa digunakan di multiplatform dan yang Paling penting Gratis tanpa Batasan jumlah / Unlimited.