Clean code series: Part 6 - Object and Data structure

1. Object

Nếu bạn đã tiếp xúc với OOP đủ lâu thì bạn sẽ thấy rằng:

  • Data của một object thì sẽ được ẩn đi
  • Cái public ra bên ngoài nên là các method

Ví dụ: Có class Car.

  • Không public các thuộc tính như: color, brand, ...(không gọi trực tiếp $car->color hay $car->brand)
  • Public các phương thức của xe như: $car->start(), $car->stop()
  • Trường hợp vẫn muốn lấy các thuộc tính của xe, bạn có thể lấy thông qua các getters function: $car->getColor(), $car->getBrand().

2. Data structure

Với những người làm về PHP, khái niệm Data structure có lẽ hơi khó một chút.

Vì PHP Array có lẽ là kiểu Data structure duy nhất thường được sử dụng, nên có lẽ ta nên nhớ lại một chút về

kiểu structure trong C++

alt

Data structure thì ngược lại với object.

  • Các thuộc tính data hoàn toàn được public ra bên ngoài
  • Data structure hoàn toàn không có các behavior nào
  • Nếu Data structure chứa các phương thức public thì các phương thức này cũng hoàn toàn chỉ mang tính điều hướng, chứ không hề chứa bussiness logic.

Tóm lại, object và data structure là 2 thành phần đối lập, cover những mảng khác nhau và bổ sung lẫn nhau.

alt

Kết luận

Trên lí thuyết, ta sẽ áp dụng chúng tùy vào những tình huống khác nhau.

  • Với những phần mà logic đã ổn định, nghĩa là ít có khả năng xuất hiện thêm các function mới, nên thiết kế

code logic dựa trên object.

  • Với những phần mà ít có khả năng xuất hiện type mới, nhưng dễ xuất hiện logic mới thì nên sử dụng data

structure.

3. Data transfer object (DTO)

DTO là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các

tầng trong ứng dụng, giữa client-server.

DTO hoàn toàn không chứa behavior/logic, chỉ được sử dụng để truyền dữ liệu và map dữ liệu từ các Domain model

trước khi truyền tới client.

Trong các ứng dụng đơn giản:

  • Các domain model thường có thể được sử dụng lại trực tiếp dưới dạng DTO
  • Được truyền trực tiếp tới lớp hiển thị

-> Chỉ có một model thống nhất

Đối với các ứng dụng lớn hơn:

  • Ta không muốn hiển thị toàn bộ dữ liệu của Domain model cho client

-> Cần mapping dữ liệu từ các Domain model sang DTO.

Lợi ích của DTO

alt