Thi?t k? h? th?ng qu?n ly danh m?c s?n ph?m trong h? th?ng Ecommerce

Thi?t k? h? th?ng qu?n ly danh m?c s?n ph?m trong h? th?ng Ecommerce

  1. Product Model.

S?n ph?m là ??i t??ng hi?n th? các th?ng tin ?? ng??i dùng th?c hi?n vi?c mua bán. M?t s?n ph?m có các thu?c tính ?a d?ng v? s? l??ng, lo?i thu?c tính, ki?u d? li?u. M?i thu?c tính có các yêu c?u khác nhau tính ch?t d? li?u: ?? dài, ki?u kí t?, các yêu c?u v? nghi?p v?… Do ?ó model product là m?t model kh?ng có c?u trúc c? ??nh (schemaless structure).

Cách ti?p c?n ph? bi?n ?? gi?i quy?t v?n ?? này là s? d?ng model d?ng EAV — Entity Attribute Value. ?ay là model ???c Magento, Word Press s? d?ng ?? l?u tr? các c?u trúc ?a d?ng kh?ng ??nh tr??c. ??c ?i?m c?a c?u trúc EAV là tách ph?n l?u tr? giá tr? thu?c tính (attribute value) kh?i ph?n c?u trúc các attribute c?a model. Nh? ?ó có th? ??nh ngh?a ?a d?ng các lo?i c?u trúc attribute khác nhau c?a product.

No alt text provided for this image

M?t attribute set là m?t t?p h?p các thu?c tính. M?i thu?c tính phan bi?t nhau b?i m? thu?c tính, lo?i ki?u d? li?u. M?t thu?c tính có th? thu?c nhi?u b? thu?c tính khác nhau. M?t product thu?c m?t b? thu?c tính. Các giá tr? thu?c tính c?a product t??ng ?ng v?i các thu?c tính, ??c tr?ng b?i ki?u d? li?u và m? thu?c tính. Giá tr? thu?c tính có ki?u d? li?u ???c ??nh ngh?a b?i thu?c tính. B?ng cách t? ch?c nh? v?y, h? th?ng có th? thêm các b? thu?c tính m?i d? dàng, c?ng nh? b? sung các thu?c tính vào các b? thu?c tính ?? có.

Ngoài ra m?t product còn có nhi?u h?nh ?nh, thu?c nhi?u category và có nhi?u bi?n th? khác nhau (có quan h? liên h? v?i nhi?u product khác, vd ?i?n tho?i iphone còn có các s?n ph?m bi?n th? theo màu s?c; hay m?t chi?c váy có nhi?u size khác nhau, có m?i quan h? v?i các product váy có kích c? khác nhau, phan bi?t b?i thu?c tính kích c?).

2. Thi?t k? t?ng nghi?p v?.

Các nghi?p v? s? ???c phát tri?n xoay quanh model ?? ???c xay d?ng. ?ay là layer ph?c t?p nh?t, chi?m ph?n l?n kh?i l??ng c?ng vi?c. Nghi?p v? qu?n ly s?n ph?m t?p trung vào vi?c thay ??i các thu?c tính ?a d?ng c?a s?n ph?m. Các m?c tiêu thi?t k?:

  • ??m b?o nguyên ly?Don’t Repeat Yourself?t?t nh?t. Các nghi?p v? ???c phan tách r? ràng, c? ??ng và t?p trung cao.
  • Có th? m? r?ng, s?a ??i các thành ph?n ??c l?p.
  • Linh ho?t trong vi?c phát tri?n.
  • Có kh? n?ng d? dàng test và b?o trì

Các m?c tiêu ?ó s? ?nh h??ng t?i các cách thi?t k? m? hình ?ng d?ng khác nhau. Ph?n d??i ?ay s? phan tích t?ng m? hình thi?t k? ph?n m?m ?? ??a ra s? l?a ch?n phù h?p nh?t.

2.1. M? hình MVC.

M? hình MVC là m? hình ph? bi?n trong vi?c l?a ch?n ?? xay d?ng ?ng d?ng. ?ó là m? hình ??n gi?n, d? ti?p c?n và nhanh chóng ??a ra các tính n?ng. Theo m? hình MVC, thì ph?n qu?n ly catalog s? có ki?n trúc nh? sau:

No alt text provided for this image

V?i m? hình mvc, product model s? ch?a t?t c? các ??nh ngh?a thu?c tính c?a product, truy xu?t database, th?c thi các nghi?p v?. Th?ng th??ng m? hình MVC s? s? d?ng pattern Active Record ?? mapping v?i database. ?ay là cách làm ??n gi?n, nh?ng có các h?n ch? sau:

  • Model product tr? nên quá n?ng khi ch?a quá nhi?u các logic t? ??nh ngh?a thu?c tính, truy xu?t d? li?u, th?c thi nghi?p v?…
  • Do kh?ng phan tách ???c các t?ng nghi?p v? và d? li?u nên khó th?c hi?n unit test các thành ph?n riêng bi?t.
  • Vi?c thay ??i logic truy xu?t d? li?u và logic nghi?p v? khó kh?n. Do các thành ph?n b? ph? thu?c vào nhau.
  • Tính ?óng gói c?a nghi?p v? kh?ng ??m b?o. Các nghi?p v? s? ch? ???c cài ??t theo m? hình CRUD. Vì v?y càng v? sau s? trùng l?p các logic càng cao.

Do các h?n ch? ?ó nên ?ay kh?ng ph?i m? hình phù h?p v?i các ?ng d?ng logic ph?c t?p nh? ecommerce. Nó s? d?n t?i chi phí maintain v? sau cao.

2.2. M? hình ba l?p.

H??ng ti?p c?n ti?p theo là phan tích và thi?t k? theo ph??ng pháp?Domain Driven Design. ??c tr?ng c?a m? hình này là:

  • Phan tách t?ng nghi?p v? kh?i t?ng ?ng d?ng và t?ng truy xu?t c? s? d? li?u. G?i là Domain Layer. ?ay là n?i trung tam ch?a t?t c? các logic nghi?p v?.
  • Trong t?ng nghi?p v?, t?p trung vào design model sao cho model ph?n ánh ??y ?? nh?t tính ch?t nh?t quán c?a nghi?p v?. Chia t?ng nghi?p v? thành hai thành ph?n riêng bi?t:?Domain Model?và?Domain Service.?Domain service có vai trò cung c?p các nghi?p v? ra bên ngoài xoay quanh các domain model c?a h? th?ng.
  • Thi?t k? riêng t?ng infrastructure ch?a các logic v? truy xu?t d? li?u, thao tác v?i database, messeage queue.

No alt text provided for this image

V?i vi?c t? ch?c nh? này các t?ng ?ng d?ng, nghi?p v? và data access s? chia tách riêng bi?t, và ch? t??ng tác th?ng qua interface. Các nghi?p v? s? xoay quanh model product. T?ng data acccess s? truy xu?t ho?c l?u tr? các object products.

Nh?ng vi?c áp d?ng m? hình ba l?p xoay quanh model product c?ng d?n t?i m?t khó kh?n khác là vi?c model cho các nghi?p v? ??c d? li?u. Các nghi?p v? này r?t ?a d?ng và cách làm hi?u qu? nh?t là s? d?ng các raw sql. Nh?ng n?u các vi?c truy xu?t b? th?t ch?t vào các m? hình ORM s? ?nh h??ng t?i hi?u n?ng, c?ng nh? khó cho vi?c thay ??i các logic truy xu?t d? li?u. ??ng th?i nó c?ng ?nh h??ng t?i t?c ?? phát tri?n, khi vi?c cài ??t các nghi?p v? query ?a d?ng ph?c v? client b? c?n tr? và ph? thu?c vào vi?c thi?t k? model và t?ng Repository.

2.3. M? hình CQRS.

M? hình CQRS (Command Query Responsibility Segregation) là s? m? r?ng c?a m? hình trong ba l?p trong DDD. ??c tr?ng quan tr?ng c?a CQRS là vi?c tách hai ph?n logic ??c và ghi d? li?u ra hai ph?n riêng bi?t:

  • Ph?n ghi d? li?u: ???c th?c hi?n qua vi?c send các command t?i các handler th?ng qua command bus. Comand hanlder ?óng vai trò t??ng t? domain service s? t??ng tác v?i các model ?? th?c hi?n các nghi?p v? thay ??i d? li?u.
  • Ph?n ??c d? li?u: ???c thi?t k? riêng kh?ng l? thu?c vào các model c?a ph?n ghi d? li?u. Do ?ó có th? linh ho?t trong vi?c truy xu?t database, c?ng nh? s? d?ng các data source khác nhau ?? t?i ?u v? t?c ?? truy xu?t.

No alt text provided for this image

M? hình CQRS ?? kh?c ph?c các h?n ch? ?? nêu ? m?c 2 bên trên. CQRS mang l?i các l?i th? l?n:

  • Cho phép phát tri?n và t?i ?u ph?n ??c d? li?u riêng bi?t v?i ph?n ghi d? li?u.
  • Vi?c m? hình hoá các nghi?p v? ghi d? li?u d??i các command cho phép che ??y t?t các logic nghi?p v?, giúp vi?c m? r?ng d? dàng h?n. ??ng th?i các comand ?ó có th? d? dàng chuy?n ??i gi?a x? ly ??ng b? và b?t ??ng b? th?ng qua l?p abstract là command bus mà kh?ng thay ??i m? hình. Giúp cung c?p m?t m? hình nh?t quán, xuyên su?t trong b? ki?n trúc.

C? ba m? hình trên ??u có ?u nh??c ?i?m riêng:

  • M? hình MVC ??n gi?n, nh?ng h?n ch? khi gi?i quy?t nghi?p v? ph?c t?p và testing, m? r?ng
  • M? hình ba l?p phù h?p cho vi?c x? ly nghi?p v? ph?c t?p, nh?ng có nhi?u h?n ch? khi t?i ?u ph?n ??c ra.
  • M? hình CQRS m? r?ng t? m? hình ba l?p, gi?i quy?t t?t vi?c chia tách ??c ghi, nh?ng c?ng ?òi h?i ph?i thi?t k? ph?c t?p h?n.

??i v?i các h? th?ng ecommerce l?n thì m? hình CQRS là m? hình phù h?p nh?t. Vì nó giúp gi?i quy?t c? hai ?òi h?i l?n là x? ly nghi?p v? ph?c t?p và ph?i ?áp ?ng hi?u n?ng cao. Phan ti?p theo s? phan tích sau h?n v? m?t h? th?ng và m?t bi?n th? m? r?ng c?a CQRS là CQRS — ES (Command Query Responsibility Segregation — Event Sourcing).

3. Thi?t k? v? h? th?ng.

M?t trong các ?òi h?i l?n c?a vi?c qu?n ly danh m?c s?n ph?m là ph?i thi?t k? ?? ?áp ?ng các nhu c?u v? hi?u n?ng và tích h?p v?i các h? th?ng khác. ?? ?áp ?ng các yêu c?u t?t, thì ph?i ???c thi?t k? t? t?ng th? ngay t? ??u. Có v?y m?i t?o ra s? phát tri?n li?n m?ch, nh?t quán giúp ??m b?o tính ?n ??nh, c?ng nh? ti?n ?? làm vi?c.

3.1. M? hình CQRS — ES.

M? hình Event Sourcing — ES, là m? hình thi?t k? mà tr?ng thái c?a object s? ???c l?u tr? d??i d?ng chu?i các s? ki?n thay ??i. Nó khác v?i m? hình thi?t k? th?ng th??ng, khi mà ch? l?u tr? tr?ng thái cu?i cùng c?a object.

No alt text provided for this image

Khi object b? thay ??i, s? t??ng ?ng v?i m?t versioned event l?u tr? d? li?u thay ??i c?a object. Các event s? ???c l?u tr? d?ng appending only vào m?t c?u trúc table g?i là event store. Vi?c l?u tr? các event thay ??i này giúp mang l?i các l?i ích:

  • L?u tr? ???c l?ch s? thay ??i c?a các ??i t??ng.
  • N?u các event ???c g?i t?i các h? th?ng khác, các h? th?ng ?ó có th? sinh ra tr?ng thái cu?i cùng chính xác c?a ??c t??ng g?c. Do ?ó d? dàng tích h?p v?i các h? th?ng khác.

D?a trên các event ???c published ?i có th? xay d?ng ph?n l?u tr? riêng cho?read side, ?? t?i ?u cho t?c ?? truy xu?t d? li?u.

3.2. Event Bus — Kafka — MySql Binlog.

Các versioned event c?a ??i t??ng n?u ???c g?i ?i s? giúp h? th?ng d? dàng tích h?p v?i nhi?u h? th?ng khác. Event Bus là tên g?i logic c?a m?t ???ng truy?n ch?a t?t c? các versioned event d??i d?ng stream. Các consumer ch? vi?c subscribe event bus là có th? nh?n ???c các event ?? x? ly.

Các event ???c l?u tr? trong mysql database. T?t c? các thay ??i trong database ??u ???c MySql l?u vào m?t log file, g?i là binlog. B?ng vi?c extra binlog c?a mysql, thì h? th?ng có th? b?t ???c m?i event phát sinh ?? g?i ?i.

Kafka là m?t message broker theo m? hình log based, cho phép l?u tr? và g?i ?i các event ?úng v?i th? t? g?i vào. Vì v?y nó là l?a ch?n t?t nh?t ?? làm t?ng l?u tr? cho event bus.

No alt text provided for this image

3.3. Ki?n trúc t?ng th?.

?ên ?ay b?c tranh c?a h? th?ng ?? tr? nên r? ràng. T?ng m?nh ghép t? model, nghi?p v? t?i tích h?p ?? ??y ??. Có th? tóm t?t l?i: h? th?ng s? xay d?ng nghi?p v? quanh model product; c?u trúc theo m? hình CQRS — ES; s? d?ng MySql Binlog; Kafka ?? publish các event thay ??i m?t cách ?n ??nh; d?a trên event bus s? xay d?ng các c?u trúc l?u tr? có t?c ?? truy xu?t cao nh? Elastic, MongoDb, c?ng nh? tích h?p v?i các h? th?ng khác.

No alt text provided for this image

4. K?t lu?n.

Thi?t k? h? th?ng qu?n ly danh m?c s?n ph?m trong ecommerce ?òi h?i ph?i ??t ???c cùng lúc nhi?u m?c tiêu, v?i m?t t?m nhìn xuyên su?t và nh?t quán. T? m?c ?ng d?ng cho t?i m?c h? th?ng ??u ph?i có s? g?n k?t li?n m?ch. T?t c? h??ng t?i hai m?c tiêu quan tr?ng ph?i ??t ???c:

  • X? ly ???c các nghi?p v? ph?c t?p
  • ??m b? hi?u n?ng và ?? ?n ??nh c?a h? th?ng.

Ph??ng pháp phan tích thi?t k? Domain Driven Desing, m? hình CQRS — ES, c? ch? replicate ?n ??nh c?a MySql, s? ??m b?o th? t? message c?a Kafka, c?ng nh? các database t?i ?u cho read nh? Elastic, Mongo… là các nhan t? chính ??m b?o ch?t l??ng c?a h? th?ng.

Nghia Le

要查看或添加评论,请登录

TikiNOW的更多文章