Tạo Một Ứng Dụng Android Theo Mô Hình Flux Architecture

Trong bài viết này tôi sẽ đi vào thực hành là tạo một app be bé, chứ không đi sâu vào lý thuyết . Nhưng trước tiên tôi sẽ nói qua một chút về flux là gì.

Giới thiệu sơ qua về kiến trúc Flux(Flux Architecture)

Flux Architecture đã được làm và dùng bới Facebook. Mục đích đầu tiên của họ khi làm Flux Architecture là cho các dapp web client-side và tất nhiên nó không có ý định làm cho các điện thoại app.Nhưng với những chức năng và sự dễ làm của nó đã được biến đổi rất tốt vào trong nhưng Android Project. Bạn có thể xem cụ thể về Flux tại buổi giới thiệu của Facebook tại đay.

flux-graph-simple.png

Có 2 chức năng chính để bạn có thể hiều về Flux:

Luồng data luôn luôn là 1 chiều
Luồng data một chiều là chức năng chính trong Flux Architecture làm cho nó trở lên rất dễ để học.

Ứng dụng là được chia vào 3 phần Chính:

-View: Giao diện app. Nó tạo ra các Action để lời hồi đáp với tương tác của người sử dụng.

-Dispatcher: Là một Hub ngay giữa, chịu trách nhiệm gửi tất cả các Action tới mỗi Store.

**-Store **: Duy trì trạnng thái cho ứng dựng, lời hồi đáp lại các Action với các state cụ thể, thực thi logic, phát ra Change Event khi việc xử lý đã xong.Những sự kiện này đã được dùng bởi View cho việc update giao diện.
Cả 3 phần giao tiếp với nhau bằng Actions. Action là đối tượng dễ làm được xác định bởi một Type của Action, và chứa data quan hệ tới Action đó.

Flux Android Architecture

flux-graph-complete.png

Ở đây tôi sẽ dùng 1 API đã được public , API này sẽ trả về list user dưới format json:

http://api.randomuser.me/?results=30&nat=en 

Định dạng data trả về như sau:

{     "results": [         {             "gender": "male",             "name": {                 "title": "mr",                 "first": "محمد",                 "last": "جعفری"             },             "location": {                 "street": "4658 پاسداران",                 "city": "کرمانشاه",                 "state": "البرز",                 "postcode": 24174             },             "email": "[email protected]",             "login": {                 "username": "greencat281",                 "password": "1a2b3c",                 "salt": "Z2BZDBif",                 "md5": "4da3307eb0fcd85ddf67ac7e058a5a49",                 "sha1": "46957ac2c6c9c4289b3246b47220df6196facba6",                 "sha256": "7669b6e09d0e0afdd2b580c44132d9eb032d66bd328c070777f203c3352fbd39"             },             "dob": "1984-02-02 06:00:35",             "registered": "2009-09-27 16:23:44",             "phone": "029-95345035",             "cell": "0912-733-8663",             "id": {                 "name": "",                 "value": null             },             "picture": {                 "large": "https://randomuser.me/api/portraits/men/76.jpg",                 "medium": "https://randomuser.me/api/portraits/med/men/76.jpg",                 "thumbnail": "https://randomuser.me/api/portraits/thumb/men/76.jpg"             },             "nat": "IR"         },         {             "gender": "male",             "name": {                 "title": "mr",                 "first": "harry",                 "last": "cunningham"             },             "location": {                 "street": "9703 railroad st",                 "city": "pembroke pines",                 "state": "nevada",                 "postcode": 39030             },             "email": "[email protected]",             "login": {                 "username": "bluegoose866",                 "password": "1024",                 "salt": "9sSbrNw7",                 "md5": "0644f4818faaa439234bb5389915d3d2",                 "sha1": "212ed1c3bd4f4f3ca95143f6b8bdab560a0bb714",                 "sha256": "1e4da62a3143c4f353c643fcfef4c76c8f99a0b158449b9bef2d26cd7e4242ba"             },             "dob": "1970-03-22 08:50:11",             "registered": "2005-03-18 18:45:05",             "phone": "(588)-912-0783",             "cell": "(166)-809-1682",             "id": {                 "name": "SSN",                 "value": "660-76-3042"             },             "picture": {                 "large": "https://randomuser.me/api/portraits/men/8.jpg",                 "medium": "https://randomuser.me/api/portraits/med/men/8.jpg",                 "thumbnail": "https://randomuser.me/api/portraits/thumb/men/8.jpg"             },             "nat": "US"         },         {             "gender": "male",             "name": {                 "title": "mr",                 "first": "george",                 "last": "edwards"             },             "location": {                 "street": "2441 fendalton road",                 "city": "invercargill",                 "state": "bay of plenty",                 "postcode": 15757             },             "email": "[email protected]",             "login": {                 "username": "yellowpanda574",                 "password": "collins",                 "salt": "OoChnUhS",                 "md5": "077abd3d940dc3dd61b8594159a3f662",                 "sha1": "c33d15a8a4cace0610ab472475ab2cdcd5486ccb",                 "sha256": "6d8fe10d0d51a307f60256355a7e6daf6b4a60671ab12e7472c76e58b4877593"             },             "dob": "1954-08-06 10:30:50",             "registered": "2009-04-06 07:28:32",             "phone": "(189)-448-2642",             "cell": "(922)-083-2348",             "id": {                 "name": "",                 "value": null             },             "picture": {                 "large": "https://randomuser.me/api/portraits/men/94.jpg",                 "medium": "https://randomuser.me/api/portraits/med/men/94.jpg",                 "thumbnail": "https://randomuser.me/api/portraits/thumb/men/94.jpg"             },             "nat": "NZ"         }     ],     "info": {         "seed": "b4f95d030a7af9da",         "results": 3,         "page": 1,         "version": "1.1"     } } 

TOBE CONTINUE….

Nguồn viblo.asia