diff --git a/README.md b/README.md index 52100eac8561d1d2025b0d4d782d6a93996f5610..1677c91c75e4ee5a4bc26c030aa54daa7fc94e9d 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,14 @@ Tujuan Subscriber didefinisikan sebagai interface adalah untuk mendukung banyak Kita bisa saja menggunakan Vec (list) untuk kasus ini. Namun, drawback terbesarnya ada pada kompleksitas waktunya. Jika kita hanya menggunakan Vect (list), kita tidak bisa secara langsung memverifikasi keunikan id dan url yang sedang diinsert. Sehingga butuh looping untuk mengecek satu persatu elemen yang memakan waktu O(N). Sedangkan dengan DashMap ( What a cute name :> ), kita dapat melakukan hal tersebut dengan kompleksitas rata-rata O(1) karena kita dapat langsung mengetahui apakah index yg digenerate oleh hash sudah ditempati atau belum. ## 3. When programming using Rust, we are enforced by rigorous compiler constraints to make a thread-safe program. In the case of the List of Subscribers (SUBSCRIBERS) static variable, we used the DashMap external library for thread safe HashMap. Explain based on your understanding of design patterns, do we still need DashMap or we can implement Singleton pattern instead? -Kita tidak perlu menggunakan Singleton Pattern. Pada kasus ini, yang mana konkurensi diperhatikan, DashMap lebih baik dibanding dengan kita menggunakan Singleton Pattern. Hal ini karena DashMap sudah menyediakan thread safety tanpa memerlukan manual locking sehingga secara mudah memungkinkan thread untuk melakuakn r/w secara paralel dengan kompleksitas O(1). Sedangkan jika kita membuat Singleton dengan Mutex<HashMap>, setiap operasi r/w mengunci HashMap sehingga HashMap tidak dapat diakses thread lain ketika sedang dilakukan operasi. \ No newline at end of file +Kita tidak perlu menggunakan Singleton Pattern. Pada kasus ini, yang mana konkurensi diperhatikan, DashMap lebih baik dibanding dengan kita menggunakan Singleton Pattern. Hal ini karena DashMap sudah menyediakan thread safety tanpa memerlukan manual locking sehingga secara mudah memungkinkan thread untuk melakuakn r/w secara paralel dengan kompleksitas O(1). Sedangkan jika kita membuat Singleton dengan Mutex<HashMap>, setiap operasi r/w mengunci HashMap sehingga HashMap tidak dapat diakses thread lain ketika sedang dilakukan operasi. + +# Reflection Publisher-2 +## 1. In the Model-View Controller (MVC) compound pattern, there is no “Service” and “Repository”. Model in MVC covers both data storage and business logic. Explain based on your understanding of design principles, why we need to separate “Service” and “Repository” from a Model? +Dengan membebankan tugas repository dan service hanya pda Model, projek menjadi lebih sulit dimaintain. Dengan adanya pemisahan tugas ini, repository berperan menghandle storage dan service menghandle logika bisnis, kedua beban tersebut menjadi independen sehingga ketika kita ingin memperluas salah satunya, kita tidak perlu menghiraukan yang lain. + +## 2. What happens if we only use the Model? Explain your imagination on how the interactions between each model (Program, Subscriber, Notification) affect the code complexity for each model? +Model menjadi sangat bloated. Selain itu, skalabilitas menjadi sangat buruk, misal kita ingin mengubah cara notifikasi dikirim, kita perlu merubah model dibandingkan dengan mengubah hanya `NotificationService`. + +## 3. Have you explored more about Postman? Tell us how this tool helps you to test your current work. You might want to also list which features in Postman you are interested in or feel like it is helpful to help your Group Project or any of your future software engineering projects. +Postman membantu kita untuk mengetest endpoint yang telah kita buat. Alih-alih memerlukan browser client seperti metode konvensional. Kita dapat menembak langsung ke endpoint dengan berbagai request method tanpa perlu berinteraksi melalui client. Hal ini sangat membantu kita dalam mengembangkan sisi backend dari sebuah aplikasi. diff --git a/src/controller/mod.rs b/src/controller/mod.rs index 346ff5d623c642f054ca2ad327268c45e3b56287..fe4a544b65cec3c65bedd9d1fa666dc986aff6f2 100644 --- a/src/controller/mod.rs +++ b/src/controller/mod.rs @@ -7,6 +7,6 @@ pub fn route_stage() -> AdHoc { return AdHoc::on_ignite("Initializing controller routes...", |rocket| async { rocket .mount("/product", routes![product::create, product::list, product::read, product::delete]) - .mount("notification", routes![notification::subscribe, notification::unsubscribe]) + .mount("/notification", routes![notification::subscribe, notification::unsubscribe]) }); }