Nhờ vàosựphát triển các ứng dụng vô cùng phong phú và hiệu quả của điện thoạithôngminh đã tạo ra những tiện ích của nó giúp con người giải quyết nhữngkhókhăn, dần trở thành một công cụ k
Trang 1-ĐỒ ÁN TỐT NGHIỆPNGÀNHKỸTHUẬTPHẦNMỀM
XÂYDỰNG ỨNGDỤNGNHẮC NHỞTRÊN NỀNTẢNGIOS
GVHD:ThS.NguyễnTháiCường
HàNội–Năm 2022
Trang 3DANHMỤCCÁCKÝHIỆU,CÁC CHỮ VIẾT TẮT i
DANHMỤCHÌNH VẼ ii
DANHMỤCBẢNG BIỂU iii
LỜI CẢMƠN iv
MỞĐẦU 1
CHƯƠNG1.TỔNGQUANVỀNỘI DUNGNGHIÊNCỨU 3
1.1 Giớithiệuchung 3
1.2 Cơsở lý thuyết 3
1.2.1 Tổngquanvềlập trình di động 3
1.2.2 Giớithiệucông cụlậptrìnhXcode 5
1.2.3 Ngônngữ lập trình Swift 6
1.2.4 Mộtsốframework tronglập trình Swift 8
1.2.5 NoSQL Database vàRealmMobileDatabase 9
1.2.6 Tổngquanvềmô hìnhMVVM 16
CHƯƠNG2 PHÂNTÍCHVÀTHIẾTKẾHỆ THỐNG 20
2.1 Khảosát người dùng 20
2.2 Giớithiệuvềhệ thống 21
2.3 Phântíchyêu cầu 21
2.3.1 Về hệthống 21
2.3.2 Về người sửdụng 22
2.3.3 Yêu cầu vềchứcnăng 22
2.4 Thiết kếhệ thống 23
2.4.1 Mô hìnhhóaUsecase 23
2.4.2 Mô tảchi tiết cácUsecase 27
2.4.3 Biểuđồ lớp hệthống 46
2.5 Thiết kế giaodiện 47
2.5.1 GiaodiệnQuảnlý nhắcnhở 47
2.5.2 GiaodiệnQuảnlý loạinhắcnhở 53
2.5.3 GiaodiệnThống kê 55
2.5.4 GiaodiệnĐăngnhập 56
Trang 42.5.5 GiaodiệnĐồng bộ 57
2.5.6 GiaodiệnThông báo 58
2.6 Thiếtkếcơ sở dữliệu 59
CHƯƠNG3 KẾTQUẢ 60
3.1 Càiđặt môi trường 60
3.2 Càiđặt chươngtrình 61
3.3 Kếtquảthuđược 63
3.4 Kếtquảkiểm thử 63
KẾTLUẬN 66
TÀI LIỆUTHAMKHẢO 67
Trang 6Hình1.1:Biểuđồcáccôngnghệcơsởdữliệumớigiai đoạn1994-2014 14
Hình1.2:Bảngsosánhtốc độcủaRealmso với các CSDLkhác 15
Hình1.3: MôhìnhMVVM 19
Hình2.1: Biểuđồ Usecasechính 24
Hình2.2: UsecaseQuản lýnhắcnhở 25
Hình2.3: UsecaseQuản lýloại nhắcnhở 25
Hình2.4: UsecaseThốngkê 26
Hình2.5: UsecaseĐồng bộ 26
Hình2.6: Biểuđồ trình tự Quản lý nhắcnhở 31
Hình2.7: Biểuđồ trình tự Quảnlý loạinhắcnhở 35
Hình2.8: Biểuđồ trình tự Thốngkê 38
Hình2.9: Biểuđồ trình tự Đăngnhập 41
Hình2.10: Biểuđồ trìnhtự Đồng bộdữ liệu 44
Hình2.11: Biểuđồ lớp hệthống 46
Hình2.12: Giaodiệnmàn hìnhTrangchủ 47
Hình2.13: GiaodiệnHiển thị tất cả danhsáchnhắcnhở 48
Hình2.14: GiaodiệnHiển thị danh sách nhắcnhởtheo ngày 49
Hình2.15: GiaodiệnThêm nhắcnhở 50
Hình2.16: GiaodiệnChitiết nhắcnhở,Sửa,Xóanhắcnhở 51
Hình2.17: GiaodiệnTìm kiếm nhắcnhở 52
Hình2.18: GiaodiệnHiện thị nhắcnhởtheoloại 53
Hình2.19: GiaodiệnThêm,Sửaloại nhắc nhở 54
Hình2.20: GiaodiệnHiện thị thống kê 55
Hình2.21: GiaodiệnĐăng nhập 56
Hình2.22: GiaodiệnĐồng bộ dữ liệu 57
Hình2.23: GiaodiệnThông báo 58
Hình2.24:Cơ sởdữ liệu 59
Hình3.1: Phầnmềm Xcode trênAppstore 60
Hình3.2: Cửasổterminalkhi đangcàiđặthomebrew 61
Hình3.3: Generate file.xcodeproj thànhcông 61
Hình3.4: Giao diệnprojecttrênXcode 62
Hình3.5: Ứngdụng đượcbuild thành côngtrênthiết bịsimulator 63
Trang 7Bảng2.1:MôtảusecaseQuản lýnhắc nhở 27
Bảng2.2:MôtảusecaseQuản lýloạinhắcnhở 31
Bảng2.3:Mô tảusecaseThốngkê 36
Bảng2.4:Mô tảusecase Đăng nhập 39
Bảng2.5:Mô tảusecase Đồngbộ 42
Bảng2.6:Mô tảusecaseThôngbáo 45
Bảng3.1: Kiểmthửcác chứcnăng củaứng dụng 63
Trang 8Trong suốt thời gian học tập và thực hiện đồ án tốt nghiệp em luônnhậnđược sự hướng dẫn nhiệt tình từ phía nhà trường và các thầy cô giáo Vìthế,lời đầu tiên em xin chân thành cảm ơn trường Đại học Công nghiệp HàNội,thầycôgiáokhoaCôngnghệthôngtinđãtạođiềukiện thuậnlợivàtruyềndạykiếnthứcchoemtrongthờigianquađểemhoànthànhđềtàimộtcác
htốt nhất Và hơn hết em xin bày tỏ lòng biết ơn sâu sắc nhất tới thầy giáohướng dẫnThS Nguyễn Thái Cườngđã tận tình giúp đỡ, định hướng em
rấtnhiềut r o n g s u ố t q u á t r ì n h t ì m h i ể u n g h i ê n c ứ u v à h o à n t h à
n h đ ồ á n t ố t nghiệp
Khi thực hiện nghiên cứu đề tài, em đã cố gắng hoàn thành tốt nhấtbáocáo đồ án tốt nghiệp Tuy nhiên kiến thức chuyên ngành của bản thâncònnhiều hạn chế Vì vậy trong báo cáo không tránh khỏi những thiếu sót,
em rấtmong nhận được sự đóng góp của tất cả các thầy cô giáo để đồ án củaemđượcđầyđủ vàhoànchỉnhhơn
Emxinchânthànhcảmơn!
Trang 9để nhắc việc là một giải pháp thiết yếu của mỗi cá nhân giúp choviệcquảnlýcôngviệchàngngày củachúngtađượctốtvàhiệuquảhơn.
Từ nhu cầu thực tế trên nên em đã thực hiện đề tài “Xây dựng ứngdụngquản lý chi tiêu trên nền tảng Android”, giúp người dùng lên kế hoạchcôngviệcvà đặt thông báo nhắcnhởđểthựchiện cáccôngviệc đó đúng hẹn
Trang 10Ứngdụngmớixây dựngnàysẽđáp ứngcácchứcnăngnhư sau:
Trang 11CHƯƠNG1.TỔNGQUANVỀNỘIDUNGNGHIÊN CỨU
1.1 Giớithiệuchung
Hiện nay, việc sắp xếp công việc một cách khoa học hiệu quả khôngbịchồng chéo, đúng thời gian, tiến độ là vô cùng quan trọng khi hằng ngàyphảiđối mặt với khối lượng công việc lớn Vì vậy, cần có giải pháp giúp choviệcquản lý công việc của con người được dễ dàng và hiệu quả hơn Nhờ vàosựphát triển các ứng dụng vô cùng phong phú và hiệu quả của điện thoạithôngminh đã tạo ra những tiện ích của nó giúp con người giải quyết nhữngkhókhăn, dần trở thành một công cụ không thể thiếu của con người Từ thực
1.2.1.1 HybridApp
Hybrid App là ứng dụng kết hợp của cả Mobile Web App vàNativeApp Theo đó, các phần cơ bản của ứng dụng vẫn viết bằng ngôn ngữweb,nhưngđượcđặttrongnativecontainer,nên vẫncóthểđưalêncácAppStore
Trang 12o Hiệunăngchậm
o Không ổn định do khó debug Framework sẽ dịch code
thànhcode native sửa lỗi khá khó khăn không biết được dịch như thếnào
o Xây dựng ứng dụng cần dùng các phần mềm riêng biệt theohệđiều hành (dùng Xcode trên Mac để phát triển ứng dụngIOS,AndroidStudio đểpháttriểnứngdụngAndroid)
Trang 13 Ưuđiểm:
o CóthểchạytrêntấtcảtrìnhduyệtcủamobilehỗtrợphiênbảnHTML vàjavascript
o Khôngcầncài đặttrênmáy miễnlàmáycótrình duyệtweb
o Mộtphiênbảnduynhấtchotấtcả,nêngiảmchiphívàthờigianchopháttriển,bảotrì,cũngnhưnângcấp saunày
Trang 14ngày21tháng6năm2021.XcodeđượcpháthànhmiễnphíchongườidùngMac downloadthông qua chợứngdụng AppStore.
1.2.3 NgônngữlậptrìnhSwift
Swiftl à m ộ t n g ô n n g ữ l ậ p t r ì n h h ư ớ n g đ ố i t ư ợ n g d à n h c h o v i ệ c p h
á t triển iOS và macOS, watchOS, tvOSđ ư ợ c g i ớ i t h i ệ u bởi Apple tạihộinghị WWDC
2014 Swift được mong đợi sẽ tồn tại song song cùng Objective-C, ngôn ngữ lập trìnhhiện tại dành cho các hệ điều hành của Apple Swiftđược thiết kế để hoạt động với các frameworkCocoa và Cocoa Touch củaApple và phần lớn mã Objective-C Nó được biêndịch với trình biên dịchLLVM và đã được đưa vào Xcode kể từ phiên bản 6,phát hành năm 2014.Trên các nền tảng củaApple,nósửdụngthưviệnruntimeObjective-Cc h o phép mã C, Objective-C, C++ và Swift cùngchạy trongmộtchươngtrình
Appled ự đ ị n h S w i f t h ỗ t r ợ n h i ề u k h á i n i ệ m c ố t l õ i
l i ê n q u a n đến Objective-C, đángchú ýlà thuhồi động,cácràng buộcphổthông,ậ p trình mở rộng và các tính năng tương tự, nhưng theo cách "an toàn hơn",giúpdễdàngbắtlỗiphầnmềmhơn.Swiftcócáctínhnănggiảiquyếtmộtsốlỗilập trình phổ biến như con trỏ rỗng cung cấp cú pháp đặc biệt để giúp tránhkim tự tháp diệt vong Swift hỗtrợ khái niệm về khả năng mở rộng giao thức,một hệ thống mở rộng có thểđược áp dụng cho các kiểu, cấu trúc và lớp, màApple khuyến khích như một
sự thay đổi thực sự trong mô hình lập trình màhọgọi là"lậptrìnhhướnggiaothức"(tương tự nhưđặcđiểm)
Swift được giới thiệu tại Worldwide Developers Conference(WWDC)2014c ủa Apple N óđ ã trải q ua quátrình n ân g cấp l ê n ph iê nb ả
n 1.2tro ng năm 2014 và nâng cấp lớn hơn cho Swift 2 tại WWDC 2015 Ban đầu, ngônngữ độc quyền,phiên bản 2.2 được được chuyển sang phần mềm nguồn mởtheo Giấy phépApache 2.0 vào ngày 3 tháng 12 năm 2015, dành cho các nềntảng của Apple
và Linux Thông qua phiên bản 3.0, cú pháp của Swift đã trảiquaquá
Trang 15trình phát triển quan trọng, với nhóm nòng cốt làm cho sự ổn định nguồntrởthành trọng tâm trong các phiên bản sau Trong quý đầu tiên của năm2018,Swiftđã vượt quaObjective-C về mứcđộ phổ biến.
Swift 4.0, được phát hành vào năm 2017, đã giới thiệu một số thayđổiđối với một số lớp và cấu trúc tích hợp Mã được viết bằng các phiênbảntrước của Swift có thể được cập nhật bằng chức năng di chuyển được tíchhợptrongXcode
Vào tháng 3 năm 2017, chưa đầy 3 năm sau khi chính thức ra mắt,Swiftđã đứng đầu trong bảng xếp hạng TIOBE hàng tháng về các ngôn ngữlậptrình phổ biến nhất Một tài liệu 500 trang về Swift cũng được phát hànhtạiWWDC,miễnphítrêniBooksStore
Ưuđiểm:
- Khả năng phát triển ứng dụng di động nhanh và dễ dàng: Các lập trìnhviênkhông phải mất công chạy các chương trình compiler và các chươngtrình testmột cách thường xuyên nữa, mà thay vào đó tập trung vào các phầntích hợpvới mức độ khó hơn Điều này cũng giúp tiết kiệm sức mạnh và sựhao
mòncủap h ầ n c ứ n g c h o c á c n h à p h á t t r i ể n N g o à i r a , S w i f t l à m ộ t t r o n
g n h ữ n g ngôn ngữ lập trình mang lại nhiều tính năng quan trọng như: không xảy ra lỗiarrayouto f
-b o u n d , k h ô n g c ó -b i ế n x á c đ ị n h , q u ả n l ý -b ộ n h ớ t h e o p h ư ơ n g thức tựđộng, từ đó tiết kiệm được tối đa thờig i a n h ơ n đ ể h o à n t h à n h m ộ t dựán
- Code ngắn gọn, dễ đọc, dễ hiểu: Điều này giúp cho các lập trình viêntiếtkiệm rất nhiều thời gian hoàn thành dự án, cũng như tăng hiệu quá trongquátrình bảo trì và fix các lỗi bug trong tương lai Swift kế thừa và phát huytất cảcác sức mạnh của Objective-C để lại, nên các nhà lập trình sẽ có mộtmôitrườngruntimequenthuộctuyệt vời,dễdàngquảnlý vàpháttriển
Trang 16- Tốc độ thực thi của các đoạn mã swift nhanh: Theo apple, Swift nhanh gấp8lần python Không những nhanh, mà Swift còn rất mạnh mẽ, giúp cho các nhàlập trình có thể viếtđược những đoạn
mã nâng cao,phức tạp hơn như:generics, closures, tuples, multiple returns,iterators, các mẫu lập trình hàm cósẵnvànhiềuhơnthếnữa
- Swift có thể dùng cho tất cả các hệ điều hành của Apple phát hànhnhưmacOS,iOS, tvOS, watchOS,…
1.2.4 MộtsốframeworktronglậptrìnhSwift
1.2.4.1 UIKit
UIKit framework cung cấp một số class để tạo các tác vụ chạm based) cho giao diện người dùng, tất cả các ứng dụng iOS đều xây dựngdựatrên UIKit, nhà phát triển không thể xây dựng ứng dụng mà không sửdụngframework này UIKit cung cấp cơ sở hạ tầng cho việc vẽ các giao diệntrênmàn hình, điều khiển các sự kiện, tạo ra các thành phần giao diện củaứngdụng UIKit cũng tổ chức các ứng dụng phức tạp bằng việc quản lý nộidungứng dụng để hiện thị lên màn hình UIDynamics là 1 phần quan trọngtrongUIKitđược apple tích hợp từ năm 2007 cùng với sựxuấth i ệ n c ủ a
(touch-i O S 7 Bằng cách sử dụng UIK(touch-it Dynam(touch-ics, lập trình v(touch-iên có thể tạo ra cácview vớinhững tương tác vật lý như trọng lực, móc nối, va chạm, nảy lên(sauvachạm), giữacácđốitượngvớicácthànhphầnchính:UIDynamicItemprotocol,Dynamicbehaviors,Dynamicanimator
1.2.4.2 Coregraphics
Core graphics là một framework cấp độ thấp, dựa trên ngôn ngữ lậptrìnhC, chịu trách nhiệm điều khiển các vector đồ họa chất lượng cao, các nét vẽpath, hình ảnh, quản lý dữliệu và nhiều tác vụ khác Tất nhiên việc đơn giảnnhất và hiệu quả nhất đểtạo đồ họa trong iOS là sử dụng các hình ảnh với khảnăng hiện thị chuẩn kết hợp với việcđiều khiển của UIKit Apple khuyếnkhích
Trang 17các nhà phát triển nên sử dụng UIKit để vẽ, bởi vì UIKit là framework ởmứcđộ cao, UIKit cũng cung cấp các thư viện, class phục vụ việc vẽ path,pattern,gradient,images, text.
1.2.4.3 Coreanimation
Coreanimationlàmộtcôngnghệchophépbạntạocáchiệuứnganimation mứccao, và hiệu quả trực quan UIKit cung cấp các animation đểxây dựng cácCore Animation Technology Nếu cần một hiệu ứng nâng caocho ứng dụngvượt khả năng của UIKit thì đó có thể là Core Animation CoreAnimationchứa Quartz Core Framework, với việc sử dụng Core Animationbạn có thểtạo ra các phân lớp các đối tượng layer như rotate (xoay), scale ( cogiãn), … Việc
sử dụng Core Animation cũng giúp bạn thực hiện các côngviệctránhsửdụng cácAPIđồ họacấpthấpnhư OPenGL ES
1.2.5 NoSQLDatabasevàRealm MobileDatabase
1.2.5.1 NoSQLDatabase
Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụnglàmtên gọi chung cho các lightweight open source relational database (cơ sởdữliệu quan hệ nguồn mở nhỏ) nhưng không sử dụng SQL cho truy vấn.Vàonăm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuậtngữNoSQL trong một hội thảo về cơ sở dữ liệu nguồn mở phân tán ThuậtngữNoSQL đánh dấu bước phát triển của thế hệ database mới: distributed(phântán) và non-relational (không ràng buộc) Đây là cũng 2 đặc tính quantrọngnhất
Trang 18 Cómộtvàilídochứngminhchosự rađờicủa NoSQL:
- Sở dĩ người ta phát triển NoSQL suất phát từ yêu cầu cần những databasecókhả năng lưu trữ dữ liệu với lượng cực lớn, truy vấn dữ liệu với tốc độ cao màkhông đòi hỏi quá nhiều về năng lực phần cứngcũng như tài nguyên hệ thốngvàtăng khảnăngchịu lỗi
- Giảiquyếtđượcmộtsố vấnđềmàrelationaldatabase khônggiảiquyếtđược
Trang 19a Keyvalue stores
Lưu trữ kiểu key-value là kiểu lưu trữ dữ liệu NoSQL đơn giản nhấtsửdụng từ một API Chúng ta có thể nhận được giá trị cho khóa, đặt một giátrịcho một khóa, hoặc xóa một khóa từ dữ liệu Ví dụ, giá trị là ‘blob’ đượclưutrữ thì chúng ta không cần quan tâm hoặc biết những gì ở bên trong Từcáccặp giá trị được lưu trữ luôn luôn sử dụng truy cập thông qua khóa chínhvàthườngcóhiệunăngtruy cập tốt và cóthểdễdàngthu nhỏ lại
b Columnorienteddatabase
Cơ sở dữ liệu column-family lưu trữ dữ liệu trong nhiều cột trongmỗidòng với key cho từng dòng Column families là một nhóm các dữ liệuliênquan được truy cập cùng với nhau Ví dụ, với khách hàng, chúng tathườngxuyên sử dụng thông tin cá nhân trong cùng một lúc chứ không phảihóa đơncủa họ Cassandra là một trong số cơ sở dữ liệu column-family phổbiến.Ngoài ra còn có một số cơ sở dữ liệu khác như HBase, Hypertable vàAmazonDynamoDB Cassandra có thể được miêu tả nhanh và khả năng mở rộng dễdàng với các thao tácviết thông qua các cụm Các cụm không có node master,vì thế bất kỳ việc đọc và ghi nàođểu có thể được xử lý bởi bất kỳ node nàotrongcụm
c Graph database
Kiểu đồ thị này cho phép bạn lưu trữ các thực thể và quan hệ giữacácthực thể Các đối tượng này còn được gọi là các nút, trong đó có cácthuộctính.M ỗ i n ú t l à m ộ t t h ể h i ệ n c ủ a m ộ t đ ố i t ư ợ n g t r o n g ứ n g d ụ n g
Q u a n h ệ được gọi là các cạnh, có thể có các thuộc tính Cạnh có ý nghĩa địnhhướng;cácnútđượctổchứcbởicácmốiquanhệ.Cáctổchứccủađồthịchophépcác dữ liệu được lưu trữ một lần và được giải thích theo nhiều cách khác nhaudựa trên các mối quan hệ Thông thường, khichúng ta lưu trữ một cấu trúc đồthị giống như trong RDBMS, nó là một loại duy nhất của mối quan hệ.Việctăngthêmmột
Trang 20mối quan hệ có nghĩa là rất nhiều thay đổi sơ đồ và di chuyển dữ liệu,màkhông phải là trường hợp khó khi chúng ta đang sử dụng cơ sở dữ liệu đồthị.Trong cơ sở dữ liệu đồ thị, băng qua các thành phần tham gia hoặc cácmốiquan hệlà rấtnhanh Cácmốiquan hệ giữa cácnode khôngđượctínhv à o thời gian truy vấn nhưng thực sự tồn tại như là một mối quan hệ Đi qua cácmốiquan hệ lànhanhhơnsovớitính toán chomỗi truy vấn.
d DocumentOrienteddatabases
Tài liệu là nguyên lý chính của cơ sở dữ liệu kiểu dữ liệu Dữ liệu lưutrữvà lấy ra là các tài liệu với định dạng XML, JSON, BSON,… Tài liệu miêu tảchính nó, kế thừa từ cấutrúc dữ liệu cây Có thể nói cơ sở dữ liệu tài liệu là 1phần của key-value Cơ
sở dữ liệu kiểu tài liệu như MongoDB cung cấp ngônngữ truy vấn đa dạng vàcúc trúc như là cơ sở dữ liệu như đánh index,…MộtsốcơsởdữliệutàiliệuphổbiếnmàchúngtahaygặplàMongoDB,CouchDB,Terastore, OrientDB, RavenDB
Trang 21độ truy vấn khá chậm khi mà dữ liệu phình to ra cũng như khi mà thựchiệnphép JOIN Hơn thế nữa, với mỗi ngôn ngữ khác nhau thì việc thiếtlậpSQLitecóthểtốn khánhiềucôngsức.
Trên cơ sở đó, Realm Mobible Database ra đời với mục đích cung cấpcholập trình viên một lựa chọn có thể thay thế cho SQLite hiện nay nhưngvẫnđảmbảomọichức năngcần thiết củamột CSDLthôngthường:
Realm Moblie Database ( gọi tắt là RMD) là một NoSQL ( NotOnlySQL) Nó hướng tới việc xây dựng một ứng dụng theo hướngOfflinedatabase first Điều này có nghĩa là ứng dụng vẫn có thể hoạtđộng dùcho không có kết nối mạng, dữ liệu sẽ được lưu trực tiếp trênthiết bị,ngườidùng vẫncóthểtiến hànhmọiviệcmột cáchthuậnlợi
RMD lưu trữ dữ liệu dưới dạng Object và nó cũng cung cấp các hàmvàphương thức để có thể truy vấn dữ liệu mà không cần thông qua câutruyvấnSQL
Phần core của RMD được viết bằng C++ và là mã nguồn mở,
ngườidùngcóthểtùy chỉnh lại theoý muốncánhân
Cross-flatformvàđãcóphiênbảnchocácngônngữsau:Swift,Java,Objective– C,Xamarin, ReactNative
Cungcấp miễnphí
Realmđơngiảnhóakiếntrúcứngdụngcủabạntrongkhicungcấpchobạn các tính năng rất mạnh mẽ Nền tảng Realm thực sự được tạo thành từhaithànhphầnchính.CơsởdữliệuRealmvàMáychủđốitượngRealm.Theot
ài liệu chính thức, hai thành phần này hoạt động cùng nhau để tự động đồngbộ hóa dữ liệu cho phép nhiềutrường hợp sử dụng khác nhau, từ ứng dụngngoạituyếnđến tích hợpphụtrợphức tạp
Một trong những yếu tố chính khiến Realm trở nên đặc biệt là thực tế lànóđượcxâydựngchonhucầupháttriểndiđộnghiệnđạicủachúngtôivàrất
Trang 22nhiều giải pháp chúng tôi sử dụng không thực sự được thiết kế cho điệnthoại,máytính bảnghoặc thiếtbị đeođược:
Hình1.1:Biểuđồ cáccôngnghệcơsởdữliệumớigiai đoạn1994-2014
ĐiểmmạnhcủaRealmmobiledatabase:
- Dễ cài đặt và dễ sử dụng: RMD khá dễ cài đặt và sử dụng Đối với IOS,cóthể sử dụng thư viện quản lý CocoaPods để cài đặt và sử dụng Để sửdụngRMD,l ậ p t r ì n h v i ê n c h ỉ c ầ n t ạ o m ộ t c l a s s n h ư b ì n h t h ư ờ n g , v à k ế
Trang 23- Realm hỗ trợcustom migrating- việc cập nhật CSDL, thêm/bớt các
bảng,trường đều được hỗ trợ một cách thuận tiện, đơn giản nhất bằng cách kếthừalớpRealmMigration
- Các lớp của Realm hỗ trợ nhiều trong việc tránh lỗi Null PointerException.Khit r u y v ấ n k h ô n g c ó k ế t q u ả , đ ố i t ư ợ n g R e a l m R e s u l t s đ
ư ợ c t r ả v ề s ẽ l à rỗng,và phương thứcsize()sẽchora0
ĐiểmyếucủaRMD:
Trang 24sẽ không biết được các thông tin gì về các tầngtrêncủanó.
Trang 25 Mộtđịnhnghĩakhác vềViewModeltrongMVVM:
ViewModel sẽ đảm nhận công việc đồng bộ dữ liệu từ Model lênView.Mối quan hệ giữa View và View-Model là View sẽ được ánh xạ tớiViewModeln h ư n g V i e w M o d e l l ạ i k h ô n g b i ế t t h ô n g t i n g ì v ề V i e w n ó
đ ư ợ c ẩ n giấu qua cách sử dụng Data-binding và cơ chế của mô hình Observer,mộtViewModelcóthểđượcánh xạtừ nhiềuView
Lưu ý: Trong mô hình MVVM, các tầng bên dưới sẽ không biết được
cácthông tin gì về tầng bên trên nó ViewModel cũng không hề biết gì vềView,một ViewModel có thể sử dụng cho nhiều View thường được gọi làbindingdata, cóthểlà1 chiều hoặc 2 chiềutùy nhucầucủaứngdụng
ThôngthườngkhisửdụngvớiMVVMchúngtanêntạo3thưmụcchínhchứacácfilecodeliên quan
Tại đây chứa các file giao diện và mỗi file giao diện đều có class behind đi kèm Đặc biệt file code-behind ta sẽ không sử dụng đến, mọiđiềucầnl à m s ẽ c h u y ể n x u ố n g c l a s s V i e w M o d e l T ấ t n h i ê n l à b ạ n c
code-ó t h ể c o d e trong file code-behind của XAML nhưng đồng nghĩa điều đcode-ó sẽ phá vỡ quyước của MVVM.Bạn có thể khai báo thuộc tính datacontext hoặc vài thiết lậpkhác nhưng nên hạn chế tốithiểu code ở đây Views được sử dụng để kết hợpvới các mô hình MVVM, Nó dùng để cungcấp một sự chia tách gọn gàngcủa kháiniệm giữaUI vàpresentationlogicvàdata
Trongt h ư m ụ c M o d e l s t ạ o c á c t ầ n g c h ứ a d ữ l i ệ u v à b ấ t k ỳ
l i ê n k ế t validation, logic nghiệp vụ để chắc chắn tính toàn vẹn của data, bạn có thểtách
Trang 26ra như một Repositories khác, chúng được dùng như một phần của môhìnhMVVM
Thông thường trong một file giao diện thì ta tạo ra một class ViewModelstương ứng (có đôi lúc ta tạo nhiều class phụ giúp tinh giản file code vàgọichúngtrongclassViewModelschính)
ViewModels sẽ sử dụng các models nếu cần định nghĩa dữ liệu Sự liênkếtgiữa View-ViewModel giúp chúng gửi và nhận dữ liệu, để hiểu rõ ta cầntìmhiểu các khái niệm về Binding, DataContext, Behaviors SDK, nhờ đó tatáchcode-behindcủa Viewvà đưaxuống ViewModel
Ngoài ra một lớp ViewModels chứa presentation logic và state của ứngdụng.ViewModel cần chứa các chức năng của ứng dụng ViewModels địnhnghĩaproperties, commands và events để chuyển đổi controls trong view cầndata-bind
- Databinding
Binding Data trong MVVM là điều không bắt buộc, một số implementchỉđơn giản làm ViewModel như một lớp trung gian giữa Model-View, lớpnàygiữ nhiệm vụ format data hoặc mapping trạng thái của View Tuy nhiêncáchnày theo mình khiến cho ViewModel trở thành Presenter và đưa kiếntrúc nàyvềMVP
Trang 27+ Đối với dự án lớn hơn, nó gây khó khăn và mất thời gian để thiết kếcácViewModel
+ Việc liên kết dữ liệu cho tất cả các thành phần gây khó khăn trongviệcdebugkhi cơsởdữ liệu phứctạp
Trang 282.1 Khảosátngườidùng
Câu1:Bạngặpkhókhănhayvấnđềgìtrongviệcquảnlýsắpxếpcôngviệc?
Trảlời:
o Chưabiếtsắpxếphợplý,vẫnlộnxộn,khôngliệtkêđủcôngviệccầnthựchiện
o Hãy có thói quen trì hoãn, không biết việc nào quan trọng,việcnào sắpđếndeadline
o Nhiềuviệcquásắpxếpkhôngđượchiệuquả
Câu2:Bạncóthườngdễquênvàbỏlỡcáccôngviệcquantrọngkhông?
Trang 29o Chưaphù hợpvới bảnthânnên khótrongviệc sử dụng
Câu6:Bạnthíchnhấtchứcnănggìtrongmộtứngdụngnhắcnhởcôngviệc?
o Nhắc công việc khi chưa hoàn thành và sẽ không tắt thôngbáochođếnkhi hoànthành
o Có thể thay đổi linh hoạt, nhiều chức năng để tích hợp vớitừnghoàncảnh, ngườidùng khácnhau
o Thôngbáotrướcmộtkhoảngthờigiantrướckhichúngtacầnphảithựchiệncông việcđó
o Giao diện đẹp, trực quan Âm thanh thông báo tuỳ vào mứcđộquantrọng củaviệcchẳnghạn
2.2 Giớithiệuvềhệthống
Quakhảo sát vàtrêncơ sởphân tíchở các giaiđoạn trướcc ầ n x â y dựngmột hệ thống nhắc nhở hoàn chỉnh và chuyên dụng Ứng dụng sẽchophépn g ư ờ i s ử d ụ n g t ạ o n h ắ c n h ở đ ị n h k ỳ , t ạ o l o ạ i n h ắ c n h ở t ù y t h
e o đ ặ c điểm và ngành nghề khác nhau Cơ động có thể dễ dàng quản lý đượcthôngtincácngàynhắcnhở.Thôngbáonhắcnhởcôngviệckhichưahoànthànhkịp thời và đúng lúc Đồng thời có thể xem thống kê công việc:đ ã h o à n thành, quá thời hạn
và vẫn đang tiến hành Hệ thống cũng giúp ghi lại nhữngkế hoạch định làmtrong tương lai nhưng chưa định thời gian, hệ thống sẽ cóhìnhthứcgợi nhớcho người dùngnhữngcông việcnày
2.3 Phântíchyêucầu
2.3.1 Vềhệthống
Ứng dụng nhắc nhở sẽ hướng tới một hệ thống có giao diện đẹp, dễsửdụng, dễ quản lý và đem lại một sự trải nghiệm tuyệt vời nhất cho ngườisửdụng Bên cạnhđ ó , ứ n g d ụ n g c ũ n g h ư ớ n g t ớ i s ự t ố i
ư u h i ệ u s u ấ t , t i ế t k i ệ m thờigiannhấtcho người sửdụng
Trang 302.3.2 Vềngườisửdụng
Người dùng có thể nắm bắt được các công việc, quản lý nhắc việc.Ngoàiviệc có thể xem danh sách thông tin tất cả các công việc thì người dùng có thểxem chi tiết theo loại nhắc nhở, xem theongày, hay chỉ xem của hôm nay vàthựchiệntạo mọi lời nhắctheoý muốn trong ứng dụng
Trang 322.4.1.3 BiểuđồUsecase
1 BiểuđồUsecasechính
Hình2.1:BiểuđồUsecasechính
Trang 34c PhânrãUsecase<Thốngkê>
Hình2.4:Usecase Thốngkê
d PhânrãUsecase<Đồngbộ>
Hình2.5:UsecaseĐồngbộ
Trang 351 Thêm nhắc nhở:
- Người dùng chọn vào button thêmnhắcnhở trên màn hình, hệ thống hiển thịlênmànhìnhthêm nhắc nhở
- Ngườidùngnhậpthôngtinvàchọn“Thêmnhắcnhở”đểhoànthành
- Người dùng nhập thiếu thông tin hệ thốngchuyểnsangluồng A1
- Hệthốngkiểmtrathôngtinvàcậpnhậtthôngtinvàocơsởdữ liệu
2.Sửa thông tin nhắcnhở
- Người dùng chọn nhắc nhở cần thay đổithôngtinvà ấnvàonó
Trang 36- Hệthốnghiểnthịgiaodiệnchitiếtthôngtin nhắcnhở đó.
- Người dùng nhập thông tin cần thay đổivàchọn“Save”
- Hệ thống kiểm tra lại thông tin và
cậpnhậtvào cơsởdữ liệu
3.Xóanhắcnhở
- Người dùng click vào nhắc nhở muốnxóavà chọn “Delete” Hoặc vuốt nhắc nhở đósangbêntráivàchọn“Delete”
- Hệ thống thực hiện xóa và cập nhật lạicơsở dữ liệu
4.Xemdanhsách nhắcnhở
- Người dùng chọn hiển thị nhắc nhởtrênmànhình
Trang 374.Tìm kiếm nhắc nhở-Ngườid ù n g n h ậ p t ê n n h ắ c n h ở v à n h ấ nnútt ì m k i ế m t r ê n m à n h ì n h g i a
o d i ệ nhome
Hệt h ố n g h i ể n t h ị mành ì n h d a n h s á
-c hchứacáctừkhóatìmkiếmcủangườidùngđãnhập
Casửdụngkếtthúckhingườidùngchọnchứcnăngkháchoặcthoátkhỏihệthống
Luồngrẽ
nhánh
LuồngA 1 : N g ư ờ i d ù n g n h ậ p t h i
ế u thông tinnhắcnhở-
Hệt h ố n g h i ể n t h ị b u t t o n t r ạ n g t h á idisable
Trang 38 Biểuđồ trìnhtự: