Các loại đối tượng
Đối với mục đích thảo luận của chúng tôi, hãy tách các đối tượng của chúng tôi thành ba loại khác nhau:
Đây là những đối tượng có được công việc được thực hiện. Họ chuyển tiền từ tài khoản kiểm tra này sang tài khoản khác, thực hiện các đơn đặt hàng và tất cả các hành động khác mà chúng tôi mong đợi phần mềm kinh doanh sẽ thực hiện.
Các đối tượng logic miền thông thường không yêu cầu bộ truy cập (getters và setters). Thay vào đó, bạn tạo đối tượng bằng cách trao các phụ thuộc của nó thông qua một hàm tạo, và sau đó thao tác với đối tượng thông qua các phương thức (nói, đừng hỏi).
Đối tượng truyền dữ liệu là trạng thái tinh khiết; chúng không chứa bất kỳ logic kinh doanh nào. Họ sẽ luôn có người truy cập. Họ có thể có hoặc không có setters, tùy thuộc vào việc bạn có viết chúng theo cách không thay đổi hay không . Bạn sẽ đặt các trường của mình trong hàm tạo và các giá trị của chúng sẽ không thay đổi trong suốt vòng đời của đối tượng hoặc các bộ truy cập của bạn sẽ được đọc / ghi. Trong thực tế, các đối tượng này thường có thể thay đổi, để người dùng có thể chỉnh sửa chúng.
Xem các đối tượng Mô hình chứa biểu diễn dữ liệu có thể hiển thị / có thể chỉnh sửa. Chúng có thể chứa logic nghiệp vụ, thường được giới hạn để xác thực dữ liệu. Một ví dụ về đối tượng Mô hình xem có thể là InvoiceViewModel, chứa đối tượng Khách hàng, đối tượng Tiêu đề hóa đơn và Mục hàng hóa đơn. Xem các đối tượng Model luôn chứa các bộ truy cập.
Vì vậy, loại đối tượng duy nhất sẽ "thuần túy" theo nghĩa là nó không chứa các bộ truy cập trường sẽ là đối tượng Logic miền. Việc tuần tự hóa một đối tượng như vậy sẽ lưu "trạng thái tính toán" hiện tại của nó để có thể truy xuất nó sau này để xử lý hoàn tất. Mô hình Xem và DTO có thể được tuần tự hóa tự do, nhưng trên thực tế, dữ liệu của họ thường được lưu vào cơ sở dữ liệu.
Nối tiếp, phụ thuộc và khớp nối
Mặc dù sự thật là tuần tự hóa tạo ra sự phụ thuộc, theo nghĩa là bạn phải giải tuần tự hóa thành một đối tượng tương thích, nhưng không nhất thiết phải tuân theo việc bạn phải thay đổi cấu hình tuần tự hóa. Cơ chế tuần tự hóa tốt là mục đích chung; họ không quan tâm nếu bạn thay đổi tên của một tài sản hoặc thành viên, miễn là nó vẫn có thể ánh xạ các giá trị cho các thành viên. Trong thực tế, điều này chỉ có nghĩa là bạn phải tuần tự hóa lại thể hiện đối tượng để làm cho biểu diễn tuần tự hóa (xml, json, bất cứ thứ gì) tương thích với đối tượng mới của bạn; không cần thay đổi cấu hình cho serializer.
Đúng là các đối tượng không nên quan tâm đến cách chúng được nối tiếp. Bạn đã mô tả một cách những mối quan tâm như vậy có thể được tách rời khỏi các lớp miền: sự phản chiếu. Nhưng trình tuần tự hóa nên được quan tâm về cách nó tuần tự hóa và giải tuần tự hóa các đối tượng; Rốt cuộc, đó là chức năng của nó. Cách bạn giữ cho các đối tượng của bạn tách rời khỏi quy trình tuần tự hóa của bạn là làm cho việc tuần tự hóa thành một chức năng có mục đích chung , có thể hoạt động trên tất cả các loại đối tượng.
Một trong những điều mọi người bị nhầm lẫn là việc tách rời phải xảy ra theo cả hai hướng. Nó không; nó chỉ phải làm việc theo một hướng. Trong thực tế, bạn không bao giờ có thể tách rời hoàn toàn; luôn luôn có một số khớp nối. Mục tiêu của khớp nối lỏng lẻo là làm cho việc bảo trì mã dễ dàng hơn, không phải loại bỏ tất cả các phụ thuộc.