Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Design bí kíp (Hồi 3)- Bí ẩn sequence

Thiết kế phải có sequence
Coding phải hiểu pattern design
Giang hồ đồn rằng, hơn hai mươi năm về trước, khi bong bóng dot com bùng nổ, các công ty liên tiếp ra đời, nghiên cứu những bí kíp công nghệ mới, với mục tiêu là bá chủ thị trường, hùng bá thiên hạ.
Microsoft bang ở Settle đứng đầu là lão bang chủ Bill Gate nhờ công pháp Basic programming mà tạo ra Windows thống trị hệ điều hành máy tính toàn cầu. Google phái ở Silicon Valley do hai vị đại hiệp Larry Page và Sergey Brin sáng lập với thuật toán tìm kiếm (Page Rank) đã phát minh ra Google search làm chấn động võ lâm.
Các bang phái lớn nhỏ đều tìm mọi cách để tranh giành ảnh hưởng, tiêu diệt lẫn nhau, dẫn tới thiên hạ đại loạn. Giới coder rơi vào cảnh lầm than, không biết phải chọn lựa công nghệ nào để làm việc.


Thế nhưng loạn thế tất xuất anh hùng, năm Obama lần thứ nhất, tức năm 2007 sau công nguyên, Steve Job tiên sinh của Apple môn, đêm nằm chiêm bao thấy quả táo rơi vào miệng, thuận mồm ngoạm một miếng khiến quả táo mẻ một góc. Rồi giật mình tỉnh dậy, kể lại giấc mơ với sư đệ là Jonny Ive, Jonny nghe xong quỳ xuống chúc mừng:
Ngày nay thiên hạ đại loạn, sư huynh mơ thấy táo rơi vào miệng, đây chính là điềm báo Apple ta sẽ phát minh ra sản phẩm đỉnh cao, sư huynh sẽ trở thành minh chủ trong giới công nghệ
Steve Job cả mừng, liền huy động hết huynh đệ trong môn phái, nghiên cứu miệt mài trong 2 năm, cuối cùng đã tạo chiếc iPhone với logo quả táo cắn dở thần thánh, làm chấn động giới công nghệ, khiến ai ai trong giới công nghệ nghe đến tên Steve Job cũng kinh hồn bạt vía, không dám làm loạn. Thiên hạ nhờ đó mới có được thái bình.
Nào ngờ người tài cao thì đoản mệnh, Steve Job do trúng độc ung thư mà mất hết nội lực. Lo sợ công nghệ iPhone bị thất truyền, ông đã dành những năm tháng cuối đời mình để viết nên cuốn design bí kíp, với mong muốn lưu lại cho hậu thế.
Tại hạ từ một anh coder quèn, nhờ cơ duyên nên có được bảo vật này, lại học được tầng thứ nhất UML diễn nghĩa, khiến kiến thức tăng tiến vượt bậc, lên được chức Technical Leader trong đơn vị.
Tuy nhiên, khi học đến tầng thượng thanh “Sequence thuật, pattern design” của bí kíp, thì mới nhận ra
Em ơi biển học vô bờ
Đời người hữu hạn bao giờ mới xong
Tầng này mô tả về thiết kế sequence diagram, design pattern. Là những mẫu hình thiết kế mà cổ nhân đã trải qua bao xương máu mà vẽ thành.
Kiến thức ở phần này quá phức tạp, hồi này, tại hạ chỉ có thể tổng hợp lại một vài nội dung cơ bản về sequence thuật để chia sẻ với võ lâm đồng đạo
Sequence là sơ đồ không thể thiếu trong software design, đó là bản vẽ mô tả sự tương tác của các đối tượng theo trình tự thời gian (Timeline).
Một sequence có rất nhiều thành phần
Object
Đồ hình trên là mô tả đối tượng TieuPhong với Timeline, cái này chắc ai cũng biết
Tuy nhiên trong UML, không chỉ có mỗi loại Object đơn giản như vậy
Còn có các loại sau Actor, Entity, Boundary, Control
Actor đóng vai trò như một tác nhân bên ngoài tương tác với hệ thống mà bạn phát triển(User)
Entity là đối tượng thực thể xác định, thể hiện dữ liệu hệ thống (Data Model), chẳng hạn như database có table Student, Teacher thì trong design sẽ có đối tượng Student, Teacher tương ứng
Boundaries là đối tượng interface với Actor
Control Object là đóng vai trò trung gian giữa boundary và entity, dùng để thực hiện command từ boundary
Nếu chỉ mô tả định nghĩa trên, chắc chắn võ lâm đồng đạo đọc xong sẽ đầu choáng mắt hoa, loạn chưởng mà ko hiểu gì nên tại hạ sẽ mô tả qua ví dụ dễ hiểu sau.
Entity-Control-Boundary Pattern (ECB)
Một sequence diagram có thể chứa Entity Object, Control Object và Boundary Object và follow theo một pattern gọi là Entity-Control-Boundary Pattern (ECB)
  1. Object Actor TruongTieuPham gọi method Use của Google Interface (Boundary Object) để thực hiện tìm kiếm thông tin về BichDao
  2. Google Interface gọi business logic DoSearch (từ Control Object), DoSearch có thể send ngược về Boundary để yêu cầu thêm thông tin về Bích Dao (Số đo 3 vòng, nhóm máu, sở thích..)
  3. Logic Control Object gọi GetInfo để query thông tin từ Entity BichDao rồi trả về cho logic
  4. Thông tin có được trả về cho Actor TruongTieuPham


Đây là pattern chuẩn mực, tiền thân của mô hình Model – View –Controller (MVC) đã quá nổi tiếng trong giới code đạo.
Nếu nhìn vào đồ hình, thì Actor chỉ có thể tương tác với Boundary, Boundary tương tác với Control, Control tương tác với Boundary vào Model.
Võ lâm đồng đạo khi thiết kế phần mềm thì phải thuộc lòng khẩu quyết này
Message
Message thể hiện communication giữa các object, message này có 2 loại đồng bộ (synchronous) hoặc bất đồng bộ (asynchronous)
Đồ hình trên thể hiện message đồng bộ, object TieuPhong phải thi triển lần lượt từng chiêu thức PhiLongTaiThien, thi triển xong thì mới tiếp tục tới KienLongTaiDien (mũi tên tam giác màu đen)
class TieuPhong {


void hangLongThapBatChuong()
{
ChuongPhap cpObj = new ChuongPhap();
cpObj.PhiLongTaiThien();
cpObj.KienLongTaiDien();
}
}


Trái ngược với đồng bộ là bất đồng bộ , như đồ hình dưới (mũi tên thường), đối tượng TruongVoKy gửi SMS1 cho đối tượng TrieuMan, SMS2 cho đối tượng ChuChiNhuoc. 2 event này xảy ra ko theo tuần tự, TruongVoKy gửi SMS1 xong không cần phải chờ TrieuMan reply vẫn tiếp tục gửi SMS2 cho ChuChiNhuoc. Cái này gọi là Song Thủ Hổ Bác , hai tay hai súng xử lý đồng thời 2 tác vụ
Những thiết kế cần chạy đa luồng sẽ sử dụng loại message bất đồng bộ này.
Loại message như trên được gọi là instantaneous message, được kí hiệu bằng mũi tên ngang, khi thời gian để message được truyền tới receiver là không đáng kể
Tuy nhiên, trong có loại message cần 1 khoảng thời gian để truyền tới được receiver, ví dụ SMS1 phải truyền qua network (kiểu như mạng Viettel giá rẻ) phải mất 5 – 10s để tới TrieuMan hoặc ChuChiNhuoc, thì message loại này gọi là non-instantaneous message, kí hiệu bằng mũi tên chéo
UML sequence diagram that shows a non-instantaneous message.
Tuy nhiên loại đồ hình trên rất ít khi sử dụng
Ngoài ra sequence còn sử dụng 2 loại message là createdestroy
Create message diễn tả việc khởi tạo instance của một object, như hình dưới
Object TruongTamPhong create object VoDang
Đọc đồ hình này ta có thể hiểu, TruongTamPhong và VoDang không phải là object được tạo ra đồng thời trong hệ thống, TruongTamPhong phải Start() thì mới có object VoDang
Công pháp thi triển như sau
class TruongTamPhong {
void Start(){ new VoDang();}
}
Công thủ toàn diện, có xây tất có phá, có create message thì có destroy message
Object TieuPhong dung hangLongThapBatChuong() destroy object MoDungPhuc
Trong coding , ngôn ngữ như C++, destroy object tương ứng với xử lý delete pointer trỏ vào object đó rồi gán null
::hangLongThapBatChuong()
{
delete pMoDungPhuc;// free memory
pMoDungPhuc = NULL;
}

Còn đối với những ngôn ngữ như Java, do có Garbage collector (GC) nên việc xóa object sẽ do GC xử lý
Trên đây, chỉ là một phần rất nhỏ về sequence. Thực tế cuốn bí kíp còn có những đồ hình khác, ẩn chứa nhiều huyền cơ, nếu tại hạ mô tả hết thì e rằng võ lâm đồng đạo sẽ bị ngộ chữ, tẩu hỏa nhập ma, dẫn tới kinh mạch đảo lộn ảnh hưởng tới sức khỏe nên không tiện viết thêm.


Đăng nhận xét

1 Nhận xét

  1. Xin giáo sư cho vài cuốn ebook để tu luyện thêm design bí kíp

    Trả lờiXóa