Bài đăng

SERIES SOLID PHẦN 2: Single Responsibility Principle

Hình ảnh
Nội dung nguyên lý : Một class chỉ giữ một trách nhiệm duy nhất , hay nói cách khác , muốn modify class này thì chỉ có một lý do duy nhất Vi phạm SRP( Single Responsibility Principle) Ta có ví dụ điển hình trên, một con dao có quá nhiều chức năng. Khi một phần nào đó trong dao bị hư, ta phải tháo ra toàn bộ chức năng sau đó lấp lại, trong khi đó các con dao khác lại không bị hư hỏng gì => tốn kém, tốn thời gian modify, quản lý thời gian không hiệu quả. Tại sao nên áp dụng SRP? Đối với các quy trình phần mềm nói chung việc thay đổi requirement là liên tục và rất dynamic , vì vậy việc chỉnh sửa code cũng liên tục. Việc một class quá to sẽ rất khó quản lý , quá cồng kềnh dẫn đến modify rất cực , muốn modify phải đọc lại toàn source? Dễ ảnh hưởng đển các module khác. Áp dụng Single responsibility principle như thế nào? Để áp dụng với single responsibility principle cụ thể với con dao phía trên ta chỉ phần tách các con dao chức năng thành các class nhỏ hơn, thế là xong. Khi 1 phần dao nà...

SERIES SOLID PHẦN 1: SOLID là gì? 5 nguyên tắc vàng cho dev xịn

Theo sách game programming pattern: một kiến trúc phần mềm tốt là một phần mềm được thiết kế như thể nó đúng hoàn toàn như dự đoán từ đầu đã đề ra, nghĩa là ta sẽ giải quyết mọi task một cách dễ dàng chỉ với một vài function với vị trí đặt function là hoàn hảo, không ảnh hưởng đến các đoạn mã đã viết, không để lại một chút "gợn" nào trên bề mặt yên bình của các dòng mã. Đễ làm được điều đó dễ dàng, các dev như chúng ta không thể nào bỏ qua được SOLID, những nguyên lý vàng trong việc phát triển và xây dựng phần mềm( tất nhiên phải có sự kết hợp của cả design pattern, nhưng trong phạm vi bài này mình sẽ chỉ nói SOLID). SOLID RA ĐỜI NHƯ THẾ NÀO? Lập trình hướng đối tượng là mô hình lập trình cực kì mạnh mẽ và được áp dụng nhiều nhất ngày nay, Các tính chất đặc biệt của nó khiến nó trở nên nổi bật hơn bất kì mô hình lập trình nào khác đó chính là: Encapsulation( Đóng gói ) Abstraction( Trừ tượng ) Inheritance( Kế thừa ) Polymorphism( Đa hình ) Tuy nhiên, không phải lập trình viê...

Toán vector là cái vẹo gì?

Hình ảnh
Cứ nhắc đến vector lại nhớ đến những năm tháng lớp 10 hoàng kim , thời mà đầu những năm cấp 3 lại phải chơi cùng những thứ gọi là vector nhưng chả biết để phải làm gì :)) . Mình khá may mắn vì có người thầy tâm huyết chỉ cho mình từng ứng dụng chi tiết sau mỗi bài học nhưng rồi cũng quên cho đến khi mình bắt đầu làm game thì mới đụng lại vector và hiểu ứng dụng của nó cực kì mạnh mẽ trong làm game nói riêng . Trong ngữ cảnh bài này , mình sẽ giới thiệu sơ qua toán vector và cách ứng dụng toán vector trong làm game cụ thể là unity engine. 1. Toán vector cơ bản Trong toán học , người ta định nghĩa vector là đại lượng biểu diễn cho hướng và độ lớn . Trong không gian vector được xác định bởi 3 đại lượng x , y ,z Tương tự , trong unity ta có cấu trúc Vector3 , nó đại diện cho cả Points và Vectors. Một point đại diện cho 1 vị trí nào đó trong không gian trò chơi , còn một Vector đại diện cho hướng và độ lớn Trong không gian , Đối với một point có tọa độ x ,y ,z là một vị trí duy nhất và đối...

Make AI with State Design Pattern

Hình ảnh
Hôm nay đang trong thời gian chạy deadline nhập môn kỹ thuật phần mềm , cụ thể là con game "The Walker" của team tụi mình , mình cần phải làm một con AI cụ thể là con zombie với các chức năng : tìm đường , tự động tấn công trong phạm vi cố định , chuyển sang trạng thái đứng yên khi ông có người chơi đứng gần , vân vân mây mây. Đây có lẽ là một tính năng rất bình thường , mọi chuyện vẫn suôn sẻ cho đến khi mình thêm 1 state mới và cứ như vậy code của mình hầu như phải sửa đi sửa lại nhìn rất không được clean theo phong cách OOP mà mình hướng đến Trong phạm vi bài viết này mình sẽ nói cách làm ban đầu của mình và sự cải tiến khi dùng State Design Pattern Cách giải quyết ban đầu Mình nghĩ mọi người đều sẽ nghĩ rằng : tạo 1 enum cho zombie , và dùng if else để thay đổi trạng thái của nó ví dụ : enum Status { Idle, Chase, } IEnumerator AIZombie() { float dis = Vector3.Distance(transform.position, player.transform.position); switch (W...

Connect NodeJS Express FW and DB SQL Server

Hình ảnh
Heyyo lại là mình đây. Hôm nay mình sẽ hướng dẫn các bạn cách kết nối back-end Nodejs sử dụng Express frameword với DB là SQL Server. SQL Server thì không phải bàn rồi, nó được ưu tiên khởi đầu ở các trường nên rất được đông đảo các bạn sinh viên biết đến. Thường thì với Nodejs back-end người ta nghĩ ngay đến Database là MongoDB cho phù hợp với MERN (MongoDB, Expressjs, React, Nodejs) hay MEAN (MongoDB, Expressjs, Angular, Nodejs) Stack, nhưng với từng nhu cầu của dự án mà ta có thể chọn một loại DB phù hợp Oke bắt đầu thôi ! Phần SQL Server Trước tiên ta cần enable TCP/IP protocol của SQL Server bằng cách mở Sql Server Configuration Để việc enable này được apply ta cần restart lại Service SQL Server (Right Click >> Restart) Ta đặt một PORT mặc định cho TCP/IP Protocol (Right Click >> Properties). Ở đây là 1433 do Driver SQL Server phía back-end sử dụng PORT này Sau bước này, ta cần Restart lại Service SQL Server tương tự bước trên. Đây là các thiết lập cứng cho SQL Serve...

Connect front-end React and back-end Express

Hình ảnh
Có lẽ khi mới bắt đầu bước vào con đường lập trình website thì còn khá nhiều anh em DEV mơ hồ về việc một website thực thụ có cả front end và back end tích hợp với nhau như thế nào. Chính vì thế, hôm nay mình sẽ DEMO cho các bạn cách để front end và back end giao tiếp với nhau. Trong bài viết này mình chỉ dừng lại ở mức độ minh họa với front end reactjs và back end expressjs, tạm thời chưa tích hợp DB. Các bạn có thể tham khảo cách kết nối với DB tương ứng ở trang tài liệu chính thức nhé Oke bắt đầu thôi Phần Server Chúng ta sẽ bắt đầu với phần Server trước nhé. Ta tạo 1 folder ví dụ: react-express. Sau đó mở bằng vscode và bắt dầu dự án với CLI: npm init Enter các thông tin của project, các bạn có thể bỏ qua cũng không sao. Sau bước này ta được 1 file package.json để quản lí các dependencies của dự án. Tại đây ta cài đặt 3 modules là express, concurrently, cors . Express thì chắc không cần nói đến nữa vì nó khá là quen thuộc với các anh em DEV, còn module concurrently dùng để nối 2 h...

Master về con trỏ this - cách khắc phục các lỗi thường gặp

Trong blog lần này mình sẽ chia sẽ tổng quan về con trỏ this , và một số lỗi thường gặp , các câu hỏi này rất rất hay xuất hiện trong các buổi interview và nó nằm trong các vấn đề nâng cao của javascript  This đối với những bạn mới học thì có vẻ nó khá đơn giản , vì các bạn chỉ nghĩ đơn giản là nó sẽ refer đến object chứa nó ,  đúng nhưng chưa đủ ,  vì có lẽ các bạn chưa gặp qua nhiều vấn đề chuyên sâu về this Tổng quan this keyword Như trên , thì cơ bản this là refer(tham chiếu) đến object chứa nó , nhớ nhé : LÀ OBJECT CHỨA NÓ để tí nữa mình còn nhắc lại , đối với các newbie thì sẽ hiểu như thế này Thái là con trai nhưng anh ấy thích trai Thắng là con trai nhưng anh ấy lại thích ngắm trai 6 múi  ở ví dụ trên , thì Thái và Thắng là một đối tượng , và anh ấy là đại từ nhân xưng thay thế cho Thái và Thắng => this =  anh ấy , và object =  Thái và Thắng Ví dụ: var  user = {     name : "Vo Minh Tan", ...