Ôn tập: Trình lấy dữ liệu
Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 81 trên 110.
Thử thách
DễHãy tạo một lớp DataFetcher kết hợp tất cả các khái niệm OOP bất đồng bộ trong chương này! Bạn sẽ tạo một dịch vụ dữ liệu dùng quá trình khởi tạo bất đồng bộ, các phương thức bất đồng bộ để lấy từng mục riêng lẻ và một luồng để gửi nhiều kết quả theo thời gian.
Bạn sẽ sắp xếp code vào hai tệp:
data_fetcher.dart: Tạo một lớpDataFetchermô phỏng việc lấy dữ liệu từ một nguồn từ xa. Lớp của bạn cần có:- Một trường
Stringfinal tên làsource, lưu nơi dữ liệu đến từ đó - Một hàm khởi tạo riêng để khởi tạo nguồn
- Một hàm factory bất đồng bộ tĩnh
connect(String sourceName)trả về mộtFuture<DataFetcher>. Mô phỏng độ trễ kết nối 100 mili giây, sau đó trả về một instance mới có nguồn được đặt thành tên đã cung cấp - Một phương thức bất đồng bộ
fetchItem(int id)trả về mộtFuture<String>. Mô phỏng độ trễ 50 mili giây, sau đó trả về một chuỗi theo định dạng:[source]-Item-[id] - Một phương thức tạo luồng
fetchMultiple(int count)trả về mộtStream<String>. Phương thức này cần yield các mục có ID từ 1 đếncount, bao gồm cảcount, dùng phương thứcfetchItemcho từng mục (await mỗi lần lấy dữ liệu trước khi yield)
- Một trường
main.dart: Import bộ lấy dữ liệu của bạn và minh họa cách cả ba mẫu bất đồng bộ phối hợp với nhau:- In ra
Connecting to data source... - Dùng hàm factory bất đồng bộ để kết nối với nguồn có tên
CloudDB - In ra
Connected to [source]bằng trường source của bộ lấy dữ liệu - In ra một dòng trống
- In ra
Fetching single item: - Lấy và in ra mục có ID
42 - In ra một dòng trống
- In ra
Fetching multiple items: - Dùng
await forđể lặp quafetchMultiple(3)và in ra từng mục - In ra một dòng trống
- In ra
All operations complete!
- In ra
Thử thách này kết hợp mẫu hàm factory bất đồng bộ tĩnh để khởi tạo, các phương thức bất đồng bộ thông thường cho từng thao tác riêng lẻ và async* cùng với yield để truyền nhiều kết quả theo luồng. Hãy chú ý cách phương thức luồng có thể gọi các phương thức bất đồng bộ khác bên trong!
Đầu ra dự kiến:
Connecting to data source...
Connected to CloudDB
Fetching single item:
CloudDB-Item-42
Fetching multiple items:
CloudDB-Item-1
CloudDB-Item-2
CloudDB-Item-3
All operations complete!Tự làm thử
import 'data_fetcher.dart';
void main() async {
// TODO: In ra 'Connecting to data source...'
// TODO: Dùng factory bất đồng bộ để kết nối với nguồn có tên 'CloudDB'
// TODO: Dùng trường source của fetcher để in ra 'Connected to [source]'
// TODO: In ra một dòng trống
// TODO: In ra 'Fetching single item:'
// TODO: Lấy và in ra phần tử có ID 42
// TODO: In ra một dòng trống
// TODO: In ra 'Fetching multiple items:'
// TODO: Dùng 'await for' để duyệt qua fetchMultiple(3) và in ra từng phần tử
// TODO: In ra một dòng trống
// TODO: In ra 'All operations complete!'
}
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiThư viện và câu lệnh importGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcBiến thể hiệnKiến thức cơ bản về hàm khởi tạoÔn tập: Máy tính đơn giản4An toàn với giá trị null
Giới thiệu về an toàn với giá trị nullCó thể null và không thể nullToán tử ? và !Từ khóa late và an toàn với giá trị nullToán tử xử lý nullAn toàn với giá trị null trong lớpÔn tập: hệ thống hồ sơ người dùng7Lớp trừu tượng và interface
Lớp trừu tượngPhương thức trừu tượngInterface trong DartInterface ngầm địnhTriển khai và kế thừaNhiều interfaceÔn tập: Máy tính hình10Bộ sưu tập và kiểu tổng quát
Tổng quan về List, Set và MapBộ sưu tập an toàn về kiểuLớp tổng quátPhương thức tổng quátRàng buộc kiểu tổng quátIterable và IteratorÔn tập: Lưu trữ tổng quát2Hàm khởi tạo trong Dart
Hàm khởi tạo mặc địnhHàm khởi tạo có tênDanh sách khởi tạoHàm khởi tạo hằng sốHàm khởi tạo nhà máyHàm khởi tạo chuyển hướngÔn tập: Trình tạo hình dạng5Đóng gói
Thành viên công khai và riêng tưQuy ước tiền tố _Tính riêng tư ở cấp thư việnTìm hiểu sâu về getter và setterChe giấu thông tinÔn tập: hồ sơ học sinh8Mixin
Giới thiệu về MixinTạo MixinSử dụng nhiều MixinTừ khóa on trong MixinMixin và kế thừaMixin và giao diệnÔn tập: hệ thống động vật3Thuộc tính của lớp
Thành viên instance và thành viên tĩnhTrường final và constBiến latePhương thức và trường tĩnhGetter và setterÔn tập: trình quản lý tài khoản ngân hàng6Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChú thích @overrideTừ khóa lớp finalHàm khởi tạo và kế thừaÔn tập: phân cấp nhân viên9Đa hình
Khái niệm cơ bản về đa hìnhĐa hình qua giao diệnKiểm tra kiểu lúc chạyToán tử is và asTừ khóa hiệp biếnÔn tập: Bộ xử lý thanh toán12OOP bất đồng bộ
Future và async/awaitCơ bản về StreamBộ điều khiển StreamHàm khởi tạo bất đồng bộBất đồng bộ trong phương thức lớpÔn tập: Trình lấy dữ liệuTự luyện tập: Trình biên dịch Dart online