Yo guys,
Trong lập trình, mapping là một cách mà ta dựng ra 1 set dữ liệu hardcoded trong code, rồi từ đó viết ra những methods rất là generic và flexible, mạnh mẽ,…
Để suy nghĩ và tạo ra 1 mapping hay ho, đó là một nghệ thuật và bạn xứng đáng là 1 nghệ sĩ
Nguyên Thủy
Nhắc tới mapping, là ta kiểu gì cũng nhìn ra dc 1 cái hashmap (PHP là assoc-array), một set key-value. Từng key là từng định danh với 1 set of rules của bạn.
Ví dụ về cái EventServiceProvider
của Laravel, nó có 1 cái hashmap generic như sau:
Từ đó ta thấy được, cứ 1 event là có nhiều listeners có thể listen tới. Và ở handle method, Laravel chỉ đơn giản là for-loop cái $events
này và bind vào Event
Handler
Nâng cao cấp độ 1
Như trên là 1 ví dụ của framework. Trong daily work, sẽ có nhiều thứ mà ta có thể tạo ra mapping. Mapping không chỉ define how-to-handle, mà có cũng có thể define những set of default data cho instance của bạn. Ví dụ như mình có cái mapping này để set data default cho User mới:
Và từ Controller/Service:
Và từ đó trở về sau, cần thêm data cho specific role, mình chỉ cần update cái const
là xong.
Nâng cao cấp độ 2 – Service’s binding
Đây là 1 kiểu Factory pattern, tạo ra object tương ứng để bạn solve gì đó based trên service của bạn. Với cái này mapping cũng dễ, ở đây mình bind qua Laravel’s Container luôn, các bạn xài ngôn ngữ/framework có DI thì tự làm cách của bạn nhé :))
Ví dụ về Image Upload, user có thể upload lên 3 service khác nhau là: ImgUR, Google Photo, Pixlr. Lúc đó mình sẽ có 3 services như sau:
- ImgUrService
- GooglePhotoService
- PixlrService
Về interface, cả 3 sẽ implements cái này:
Ở đây, UploadedFile
là 1 file raw đã dc upload bên phía Server của mình (vẫn còn trong temp folder của PHP) và File
là 1 Eloquent instance sẽ dc tạo ra khi store File thành công.
Rồi giờ ở AppServiceProvider.php
mình tạo 1 mapping và bind như sau:
Và giờ ở Generic Service, từ vào service mapping đã có, chiến như sau:
Đơn giản nhỉ, và giờ từ client side, mình sẽ tiếp nhận 3 service code là: imgur, google-photo và pixlr. Từ đó upload ra những service tương ứng.
Kết bài
Có gì hay nữa mình update típ hehe
Cám ơn các bạn đã theo dõi.