Bỏ qua để đến nội dung

Holistic-Driven Development

Ở chương trước, chúng ta đã có một Landscape Graph. Bây giờ là lúc biến nó thành code.

Cách tiếp cận là Holistic-Driven Development — dựng khung trước, đắp chi tiết sau.

Thay vì đi sâu vào chi tiết từng component ngay lập tức (viết SQL query, parse JSON…), chúng ta sẽ nhìn hệ thống một cách toàn diện.

  • Top-down: Bắt đầu từ component cấp cao nhất (Course) rồi mới xuống thấp hơn (API, Store).
  • Placeholder: Kết nối các phần bằng data cứng trước khi implement logic thật.
  • Chấp nhận unknowns: Chưa biết dùng GraphQL hay REST? Không sao — encapsulate lại và xử lý sau.

Nhìn vào Landscape Graph, cái gì quan trọng nhất?

Trong ví dụ này, đó là Course — UI cần hiển thị Course, nhưng không quan tâm data lấy từ đâu.

Đừng bắt đầu bằng cách viết class. Hãy viết code sử dụng nó trước — thiết kế API ergonomics.

let courseAPI = CourseAPI()
let course = try await courseAPI.loadCourse()
print(course.tutor.name)
print(course.schedule)

Sau khi chốt API, implement với data giả:

class CourseAPI {
func loadCourse() async throws -> Course {
// Placeholder — trả về data cứng
// Team UI có thể làm việc ngay
return Course(
tutor: Tutor(name: "Caleb"),
schedule: [],
calendarEvent: nil
)
}
}

Sau khi CourseAPI hoạt động với placeholder, mới đi xuống các tầng thấp hơn:

  • Tutor, Calendar, TODO List
  • Store (persistence), API (networking)

Mỗi tầng bắt đầu bằng placeholder, sau đó dần thay bằng implementation thật.

  1. Tốc độ: Team UI làm việc ngay, không cần chờ backend API.
  2. Linh hoạt: Dễ thay đổi high-level design mà không tốn công refactor.
  3. Parallel work: Chia việc dễ — người làm UI, người làm API client, người làm offline storage — tất cả dựa trên API đã thống nhất.
  4. Giảm rủi ro: Các quyết định kỹ thuật phức tạp (chọn library nào) có thể lùi lại sau, tránh bị block quá sớm.

Kết luận: Holistic-Driven Development giúp bạn giữ momentum. Đừng để perfectionism ở từng chi tiết nhỏ ngăn cản bạn dựng khung cho cả hệ thống. Dựng khung trước, đắp thịt sau.