Hành trình khai phá Domain-Driven Design

Photo by Taylor Nicole on Unsplash

Gần chục năm làm việc trong ngành phần mềm, bản thân mình đã chứng kiến cũng như tham gia trực tiếp rất nhiều dự án phần mềm mà khi mới vào giai đoạn phát triển cả team software ai cũng tràn đầy nhiệt huyết và hào hứng. Sau dăm ba tháng chăm chỉ mài đũng quần để cho ra bản beta đưa KH dùng thử, anh em coder khấp khởi chờ feedback như chờ kết quả xổ số. Nhưng đến khi nhận được feedback thì... hỡi ôi, một loạt các yêu cầu sửa đổi. Trong số các yêu cầu này không thiếu những CR (change request) mà nếu sửa đổi sẽ ảnh hưởng đến kiến trúc cốt lõi của phần mềm, coder thường rất ngại khi gặp fải loại CR này.

Nhưng biết làm sao, KH là cha là mẹ, là người trả lương cho coder mà. Lập tức PM (project manager) đưa ra lời hiệu triệu, động viên anh em coder xông vào chiến đấu với đống CR để làm vừa lòng KH... một thời gian sau thì phần mềm cũng release. Những tưởng anh em sẽ được thở phào nhẹ nhõm, nhưng sau vài tháng go-live, KH lại nhắn gửi yêu thương tới tấp đến team bằng những CR mới.

Cả team lại rơi vào vòng ngán ngẩm vì fải chuẩn bị đập đi xây mới những gì mình đã làm, tệ hơn nữa là đống code giờ đã trở nên đồ sộ như một cuốn bách khoa toàn thư mà không ai muốn đọc. Không những thế, sau một thời gian chuyển qua dự án khác, team developer giờ đã quên hết nghiệp vụ cũ. Kết hợp với tài liệu mô tả không đầy đủ, thiết kế kiến trúc phần mềm không tốt, giờ thì việc đọc lại code để kiểm tra xem đoạn code này làm nghiệp vụ gì, nghiệp vụ kia được implement ở đâu cũng dễ làm người trầm tĩnh nhất fải nản nòng. Trong thực tế không thiếu những bạn coder không giữ nổi bình tĩnh vừa xem code vừa chửi đổng người viết ra những dòng code bá đạo đó mà quên mất đôi khi chính mình là tác giả.

Khi sự chán nản lên đến đỉnh điểm, nhiều coder mạnh dạn đề đạt với leader đập cả phần mềm đi để xây mới hoặc đề đạt với PM xin chuyển qua dự án khác. Nhưng rồi khi qua dự án mới, một quy trình luẩn quẩn như trên lại tái hiện lại, y như cuộc đời chị Dậu...

Trong những ngày tháng tối tăm ấy, chợt đâu trong thiên hạ nổi nên xu hướng domain-driven design (DDD). Với tuyên bố “Tackling Complexity in the Heart of Software” bởi Eric Evans, DDD hứa hẹn sẽ đem lại một tương lai tươi sáng cho anh em coder. Nhân cơ hội này, mình liền quyết định làm một series blog để lưu lại những kiến thức mà mình học tập được trong quá trình khám phá DDD.

Backend Leader @ Pingcom, Runner