Identify Responsibilities and Boundaries: The Key to design a Loose Coupling and High Cohesion system

Loose coupling and high cohesion are two fundamental principles in software design that are often discussed but it’s difficult. After many failures, I believe I have found the key to solving the above problem: clearly defining the responsibilities and boundaries of each component. In this article, I will explain why this is a crucial step and provide practical guidance on how to achieve it.

Comparing Git Flow, Trunk Based and GitHub Flow

Việc quản lý mã nguồn là rất quan trọng để đảm bảo tính ổn định và hiệu quả của dự án. Hiện nay, có nhiều phương pháp quản lý mã nguồn khác nhau như: Github Flow, Git Flow và Trunk Based. Trong bài viết này, chúng ta sẽ đi vào chi tiết về các phương pháp quản lý mã nguồn này và tìm hiểu xem phương pháp nào phù hợp nhất cho feature team size từ 2 đến 7 người trong giai đoạn phát triển tính năng cho ứng dụng.

Parameterized Test in JUnit 5

Nếu các bạn đã thực hiện unit test với JUnit4 có một điểm yếu là không hỗ trợ parameters cho test method dẫn tới việc phải dupl code rất nhiều gây khó khăn cho việc review, update test case 👎. Điểm yếu này có thể khắc phục bằng TestNG. Rất may, JUnit5 ra đời với nhiều cải tiến, trong đó Parameterized Test là cải tiến giúp ta khắc phục được điểm yếu trên ❤️.

How to Write Testable Code

Ở bài viết Introduction to Unit Test đã nói lên được sự quan trọng của Unit Test. Nhưng trước khi áp dụng được Unit Test vào dự án hiện tại hoặc tương lai thì ta cần phải có một “bước đệm” đó học cách viết Testable Code (là Production Code cho phép thực hiện Unit Test dễ dàng). Việc này theo mình là khó khăn và vì thế bài viết này sẽ tổng hợp một số kinh nghiệm của mình để giúp bạn thực hiện việc này dễ dàng hơn.

What are S.O.L.I.D principles?

Trên con đường trở thành một developer “xịn” thì việc biết và áp dụng thành thạo S.O.L.I.D là một trong những điều kiện tiên quyết. Nó giúp ta định hình lại tư duy code rất nhiều như việc tổ chắc code, phân chia vai trò và tương tác giữa các module, class, method… Từ đó giúp code dễ đọc, dễ hiểu, dễ maintaince hơn. Nó giúp ta viết các Testable Code để thực hiện Unit Code. Nó là nguyên lý được áp dụng vào IoC/DI. Và còn nhiều ứng dụng khác. Nhưng quan trọng nó sẽ giúp bạn được tăng lương hoặc phỏng vấn tốt hơn đó 😸.

Introduction to Unit Test

Vào năm 2015 có một sự kiện làm thay đổi suy nghĩ của mình về Testing trong quy trình phát triển phần mềm. Đây là lần đầu tiên mình phải viết report 5 whys 9 steps. Nguyên nhân chính của vấn đề này là mình xem nhẹ Unit Test và hậu quả thì khá nặng nề. Vì sao thì các bạn xem tiếp bài viết nhé ;)).

Inversion of Control and Dependency Injection

Vào năm 2012, khi mình vừa mới gia nhập gia đình Global CyberSoft, bước chân vào thế giới lập trình với nhiều bỡ ngỡ 😅 thì 2 khái niệm Inversion of Control (IoC)Dependency Injection (DI) là khó nhằn nhất với mình nhưng nó lại là nền tảng cho những ứng dụng sau này. Cùng mình tìm hiểu vì sao nó lại quan trọng như thế nhé.