Liskov Substutition là một nguyên tắc khá trừu tượng. Có một vài ví dụ kinh điển như con vịt đồ chơi trong họ nhà vịt, hay hình vuông có thừa kế từ hình tam giác hay không. Cùng xét một một best practice điển hình, phổ biến mà có thể liên tưởng tới Liskov Substitution: Khởi tạo giá trị mặc định cho thuộc tính Việc này thường là để giải quyết Null Exception. Có nghĩa…
Leave a Commentrefacore Posts
Phần này tôi muốn đưa tới các bạn một ví dụ thực tế về Open/Close, một tình huống cân đo đong đếm giữa Extend hay là Modify. Cùng xem biểu đồ lớp dưới đây mô tả giải pháp cho chức năng chuyển đổi một model thành một trang markup (html hay xml …).Đây là một phần code trong dự án của tôi, bao gồm một phần code cũ và một phần code mới được refactor.…
Leave a CommentTôi có được nghe hai lần câu chuyện ở một công ty lớn ở Việt Nam, một Solution Architect đã từ chối một pull request của đồng nghiệp với lý do các thay đổi không tuân theo nguyên tắc Đóng/Mở. Tôi nghĩ rằng đã có một yêu cầu từ khách hàng và lập trình viên đã sửa đổi một lớp sẵn có để thực hiện yêu cầu ấy. SA đã từ chối vì theo SA,…
Leave a CommentTrong bài trước, tôi đã đề cập đến nhầm lẫn cơ bản dẫn đến hiểu sai về đơn nhiệm. Trong bài này, tôi muốn đưa ra một cách tiếp cận để giúp chúng ta có thể đạt được tính đơn nhiệm trong những dòng code của mình. Trước tiên, hãy chú ý đến các điểm sau: Đơn nhiệm không chỉ áp dụng cho class Trong định nghĩa về đơn nhiệm chỉ nói về class, nhưng…
Leave a CommentTrong bài trước tôi đã trình bày một vài ví dụ lấy từ mã nguồn của Microsoft về việc vi phạm Đơn nhiệm (và kể cả một số lỗi coding convention thông thường). Một trong những lý do là thiết kế cũng như kiến trúc mà chúng ta tường dùng không đảm bảo được sự tuân thủ. Điều này thực ra cũng không có gì to tát. Các nguyên tắc vốn không thể tuân thủ…
Leave a CommentRepo: https://github.com/refacore/ioc-event Xử lý sự kiện là kĩ thuật được sử dụng phổ biến. Các nền tảng cung cấp các cách khác nhau để xử lý sự kiện. Chúng ta có thể lựa chọn các chức năng được cung cấp sẵn hoặc tự xây dựng một bộ xử lý của riêng mình. Dưới đây là 3 phương án với C#. event của C Khai báo event và event theo cách mà C# cung cấp. Đây…
Leave a CommentBài SOLID là thay đổi đã lướt qua một chút các nguyên tắc trong SOLID. Bài này chúng ta cùng bàn về nguyên tắc đầu tiên Single Responsibility – Đơn Nhiệm. Mỗi class chỉ nên có duy nhất một lý do để thay đổi Đây là một nguyên tắc đơn giản và tôi nghĩ ai cũng hiểu, nhưng nó lại nguyên tắc hay bị vi phạm và dễ vi phạm nhất. Dù đơn giản nhưng…
Leave a CommentTrong bài trước SOLID – Tổng quan, tôi đưa ra quan điểm rằng SOLID không nhằm tạo ra những dòng code bất tử mà nhằm tạo ra những dòng code sẵn sàng thay đổi. Có thể cái tên SOLID khiến ta có chút liên tưởng ngược lại, nhưng từng nguyên tắc trong đó lại toàn nói về sự thay đổi. Single Responsibility – không có nhiều hơn một lý do để thay đổi class Ngay…
Leave a CommentCách đây khoảng 10 năm, tôi thực sự chật vật khi học và đọc về SOLID hay Design Pattern. Thời đó tôi nghĩ không nhiều lập trình viên hiểu về SOLID hay Design Pattern, mạng xã hội cũng không phát triển như bây giờ nên kiến thức cũng ít được chia sẻ rộng rãi. Mà những người giỏi, theo tôi nghĩ thì không phải dạng lắm mồm hay khả năng xã hội cao nên những…
Leave a CommentDùng bitwise là một cách tuyệt vời, cực kì tối ưu cả về tốc độ tính toán lẫn sử dụng bộ nhớ. Nhưng có vẻ không nhiều developer hiện nay biết và ứng dụng nó. Bài này đưa ra ba trường hợp thực tế sử dụng bit và bitwise để xử lý.Github repo: https://github.com/refacore/bitwise Lưu và xử lý quyền truy nhập Thay vì lưu thành các giá trị riêng biệt, các quyền được lưu thành…
Leave a Comment