Chương 1: GIỚI THIỆU ĐỀ TÀI 1. Lý do chọn đề tài: Âm nhạc là một trong những ngành công nghiệp lớn nhất trên thế giới, và hàng triệu người trên khắp thế giới đều yêu thích và nghe nhạc hàng ngày. Vì vậy, nghiên cứu về hệ hỗ trợ quyết định là rất cần thiết và có tính ứng dụng cao trong thực tế. Việc xây dựng một ứng dụng nghe nhạc, đăng tải nhạc và cá nhân hóa âm nhạc sẽ giúp người dùng khám phá vô số thể loại âm nhạc, trải nghiệm và sở hữu âm nhạc theo cách riêng của họ.
Ứng dụng sẽ cung cấp một không gian tuyệt vời để người dùng khám phá âm nhạc mới, tìm kiếm nghệ sĩ yêu thích, và xây dựng danh sách phát cá nhân. Chúng tôi tin rằng ứng dụng của chúng tôi sẽ là một điểm đến hấp dẫn cho người yêu âm nhạc. Với khả năng khám phá âm nhạc phong phú, người dùng có thể tìm kiếm và nghe nhạc từ nhiều thể loại khác nhau, từ pop, rock, hip-hop đến jazz, classical và nhiều hơn nữa. Ứng dụng sẽ cung cấp thông tin chi tiết về nghệ sĩ, album, và bài hát để người dùng có thể tìm hiểu thêm về âm nhạc mình yêu thích.
Mục tiêu của chúng tôi là tạo ra một ứng dụng âm nhạc thu hút và nổi bật, nơi người dùng có thể thỏa sức khám phá âm nhạc và tận hưởng những trải nghiệm nghe nhạc tuyệt vời. Phương pháp nghiên cứu và phát triển: Nhóm chúng em sẽ thực hiện đề tài này bằng ngôn ngữ Dart với công nghệ ứng dụng là Flutter. Trong quá trình tìm hiểu nghiệp vụ, nhóm chúng em có tham khảo các diễn đàn âm nhạc trên mạng xã hội. Cùng với đó là các ứng dụng có sẵn và phát triển thành công trên App store và CH Play để có cái nhìn tổng quát về đề tài đã chọn.
Nhóm phát triển tuân theo quy chuẩn thiết kế ứng dụng hiện hành. Nhóm đã thực hiện bài bản từng bước sau trong quá trình phát triển ứng dụng: Bước 1: Nhóm tiến hành thu thập thông tin yêu cầu người dùng. Bước 2: Nhóm tiến hành vẽ Usecase Diagram để mô hình hoá yêu cầu của người dùng. 8 Bước 3: Nhóm tiến hành nghiên cứu các ứng dụng sẵn có (với chức năng gần giống) trên thị trường để bắt kịp xu hướng.
Bước 4: Nhóm thực hiện chỉnh sửa lại mô hình hoá yêu cầu người dùng theo những gì đã thu thập được. Bước 5: Nhóm thực hiện thiết kế CSDL. Bước 6: Nhóm chọn Flutter (Cross platform) để phát triển ứng dụng vì phát huy tối đa được tốc độ thực thi, đồng thời hỗ trợ các tính năng cấp phục vụ cho yêu cầu của người dùng. Bước 7: Nhóm tiến hành thiết kế giao diện Prototype cho ứng dụng.
Bước 8: Nhóm tiến hành công đoạn cài đặt cho ứng dụng. Bước 9: Nhóm tiến hành công việc bảo trì (sửa chữa lỗi và phát triển thêm những tính năng chưa được đề ra ban đầu). Bước 10: Nhóm hoàn thành đồ án Mô hình sử dụng để xây dựng đề tài: MVC 1. Đối tượng hướng đến: Nhóm đối tượng chủ yếu của ứng dụng là các tổ chức/cá nhân có và biết sử dụng smart phone ở mọi độ tuổi từ 12 -> 60, cụ thể: - Bất kỳ ai yêu thích âm nhạc và có nhu cầu lắng nghe nhạc trên thiết bị di động.
- Những nghệ sĩ có mong muốn đăng tải bài hát để lan tỏa đến với mọi người. Ứng dụng này sẽ là trợ thủ đắc lực giúp người dùng nghe nhạc và truy cập thông tin về các bài hát, nghệ sĩ, và album. Người dùng sẽ có thể tìm kiếm bài hát theo tên, nghệ sĩ, thể loại, hay lời bài hát. Ứng dụng sẽ cung cấp cho người dùng thông tin chi tiết về các bài hát, bao gồm tên nghệ sĩ, album, năm phát hành, lời bài hát, và đánh giá.
Ngoài ra, người dùng cũng có thể tạo danh sách phát cá nhân, lưu trữ bài hát yêu thích, và chia sẻ những bài hát mà họ đang nghe với bạn bè qua mạng xã hội. 9 Chương 2: CƠ SỞ LÝ THUYẾT 2. Giới thiệu ngôn ngữ lập trình Dart: Hình 2. Ngôn ngữ lập trình Dart là gì? - Dart là ngôn ngữ lập trình mới, được phát triển bởi Google, hiện đã được chấp thuận bởi tổ chức Ecma (ECMA-408).
Nó được sử dụng để xây dựng các loại ứng dụng: web, server, di động (IOS và Android)[1]. - Dart là ngôn ngữ lập trình hướng đối tượng, với cơ chế garbage collector, cú pháp kiểu C. Nó hỗ trợ những khái niệm lập trình hiện đại như interface, mixin, abstract, generic, và type - safe. Đây là ngôn ngữ lập trình mã nguồn mở, được công bố trên Github.
Ưu điểm của Dart: Một số ưu điểm vượt trội của Dart so với các ngôn ngữ lập trình khác: - Năng suất: Dart có cú pháp dễ hiểu, rõ ràng và súc tích. Type-safe giúp lập trình viên có thể xác định sớm các lỗi. Bên cạnh đó Dart có hệ sinh thái rộng lớn lên đến hàng nghìn packages. 10 - Nhanh: Dart cung cấp tối ưu hóa việc biên dịch trước thời hạn để có được dự đoán hiệu suất cao và khởi động nhanh trên các thiết bị di động và web.
- Dễ làm quen: Do Dart có cú pháp kiểu C/C++, nên rất dễ học. Nếu bạn đã biết C ++, C # hoặc Java, bạn có thể làm việc hiệu quả với Dart chỉ sau vài ngày. - Reactive: Dart rất phù hợp với lập trình Reactive, với sự hỗ trợ để quản lý các đối tượng tồn tại trong thời gian ngắn, chẳng hạn như các widget UI, thông qua phân bổ đối tượng nhanh và garbage collector. Dart hỗ trợ lập trình không đồng bộ thông qua các tính năng ngôn ngữ và API sử dụng các đối tượng Future và Stream.
Từ ngôn ngữ lập trình Dart, Google giới thiệu Framework Flutter sử dụng ngôn ngữ Dart để phát triển ứng dụng di động chạy đa nền tảng. Giới thiệu về framework Flutter: Hình 2. Flutter là gì? - Flutter được phát triển nhằm giải quyết bài toán thường gặp trong việc phát triển ứng dụng là Fast Development (phát triển ứng dụng nhanh) và Native Performance (hiệu suất tối ưu cho từng nền tảng). Nếu như React Native chỉ đảm bảo Fast Development còn Native language chỉ đảm bảo Native Performance thì Flutter làm được cả 2 điều trên.
- Phiên bản đầu tiên của Flutter được gọi là "Sky" và chạy trên hệ điều hành Android. Nó được công bố tại hội nghị nhà phát triển Dart 2015, hỗ trợ các ứng dụng hoạt động ở mức 120 khung hình trên giây. 11 - Trong bài phát biểu chính ở hội nghị Google Developer Days tại Thượng Hải, Google công bố phiên bản Flutter Release Preview 2, đây là phiên bản lớn cuối cùng trước Flutter 1. - Vào ngày 4 tháng 12 năm 2018, Flutter 1.0 đã được phát hành tại sự kiện.
- Flutter Live, là phiên bản "ổn định" đầu tiên framework này. Kiến trúc của Flutter:[2] Hình 2. Kiến trúc Flutter Flutter được viết chia làm hai tầng: - Tầng ở trên sử dụng ngôn ngữ Dart cung cấp các đoạn mã xây dựng lên một ứng dụng Flutter. Các đoạn mã này cung cấp phương tiện để có thể thay đổi và chỉnh sửa chúng.
Từ đó giúp ứng dụng của lập trình viên có thể được tùy chỉnh theo mong muốn. Tầng Framework này giúp lập trình viên thay đổi mã nguồn ứng dụng ở thời điểm compile time. - Tầng thứ hai của Flutter nằm ở sâu bên dưới và được viết bằng ngôn ngữ C++. Tầng Shell này chứa các công cụ trợ giúp ứng dụng Flutter trong quá trình chạy.
Ở tầng này còn có máy ảo Dart VM. Khái niệm máy ảo là khái niệm về một ứng dụng chạy song song với mã nguồn 12 chính như một phần của ứng dụng. Máy ảo Dart VM có ba nhiệm vụ chính bao gồm: + Làm ứng dụng trung gian giữa mã nguồn được viết bởi Dart và thiết bị phần cứng (hoặc phần mềm nằm ngoài ứng dụng). + Thông dịch các đoạn mã Dart theo phương thức JIT (Just in time) hoặc AOT (Ahead of Time).
+ Thực thi các đoạn mã đã được thông dịch hoặc biên dịch cũng như cung cấp các runtime system bao gồm garbage collector, và các thư viện cần có khác. → Máy ảo Dart VM chịu trách nhiệm lớn nhất trong việc quản lý các runtime system, hỗ trợ debugging hoặc hot reload cho các ứng dụng viết bằng Flutter. Ưu điểm của Flutter so với các framework khác: - Flutter là bộ SDK đa nền tảng, hỗ trợ cả Android, iOS và web. - Hỗ trợ hot reload – các sửa đổi trong mã nguồn sẽ được cập nhật trực tiếp lên ứng dụng đang chạy.
Ngoài ra Flutter còn bổ sung thêm tính năng stateful hot reload - cập nhật ngay lập tức các thay đổi lên ứng dụng đang chạy mà không cần phải khởi động lại và giữ trạng thái đang có. Tính năng này đặc biệt hữu ích, giúp nhà phát triển ứng dụng tiết kiệm rất nhiều thời gian. - Ứng dụng được viết bằng Flutter hỗ trợ hiển thị lên đến 60FPS (hoặc 120FPS tuỳ thiết bị). Cho hiệu ứng chuyển cảnh mượt mà, nâng cao trải nghiệm người dùng.
- Một đối thủ khác của Flutter là React Native. Đây là framework được tạo bởi Facebook. Tương tự như Flutter, React Native cũng cho phép các lập trình viên sử dụng JavaScript để làm ứng dụng di động đa nền tảng, trên cả Android và iOS. 13 So sánh Flutter và React Native Flutter React Native Khả năng tái Flutter cho phép Overwriting React Native cho phép bạn sử sử dụng code.
Hỗ trợ tốt cho việc tái dụng lại code, nhưng điều này sử dụng về sau. lại bị giới hạn trong một vài components cơ bản. Cấu trúc mã Khi sử dụng Flutter, các Sử dụng React Native cần có nguồn Developer có thể thực hiện thêm JSX hoặc XML để tạo mọi thứ trên cùng một màn giao diện hay các công cụ đặc hình, trong đó đặc biệt không biệt để tạo layout. cần phải chuyển từ code sang chế độ thiết kế hoặc ngược lại, vì vậy các trải nghiệm trên Flutter khá tiết kiệm thời gian.
Cài đặt môi Việc cài đặt Flutter diễn ra Cài đặt môi trường phát triển trường phát nhanh chóng, tiện lợi với sự React Native trông khá loằng triển hỗ trợ của câu lệnh flutter ngoằng và khó khăn đối với doctor -v giúp chẩn đoán lỗi các lập trình viên mới. trong quá trình cài đặt. Các thư viện Có nhiều các third-party Từ khi React Native trở lên hỗ trợ packages đang được sử dụng phổ biến, đã có rất nhiều các và đang ngày càng được phát thirdparty packages được phát triển, và chúng thực sự rất hữu triển và được sử dụng rất dụng. nhiều trong ứng dụng.
Độ phổ biến Số lượng người sử dụng React Native có lượng Flutter đang ngày càng gia developer sử dụng đang nhiều tăng.