Nghệ thuật Mapping

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:

Nghệ thuật Mapping

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:

Nghệ thuật Mapping

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.

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Leave a Reply

Your email address will not be published. Required fields are marked *

Bình luận qua Facebook