Ví dụ, giả sử bạn đang viết một ứng dụng bằng Java .
Ứng dụng của bạn giao tiếp với một máy chủ API được viết bằng Python .
Máy chủ Python giao tiếp với cơ sở dữ liệu SQL .
Bạn cũng có một trang web cho ứng dụng của bạn được viết bằng JavaScript .
Với 4 ngôn ngữ khác nhau, thật dễ dàng để kết thúc việc lặp lại về cơ bản cùng một cấu trúc dữ liệu 4 lần khác nhau.
Ví dụ: một User
loại có thể trông như thế này (mã giả):
type User {
integer id;
string name;
timestamp birthday;
}
Mỗi phần của dự án sẽ cần một số loại đại diện cho User
. Các phần Java và Python sẽ cần hai class
khai báo khác nhau . Cơ sở dữ liệu sẽ cần một User
khai báo bảng. Và trang web kết thúc sẽ cần phải đại diện User
quá.
Lặp lại kiểu này 4 lần khác nhau thực sự phá vỡ nguyên tắc Đừng lặp lại chính mình . Ngoài ra có một vấn đề là nếu User
loại bị thay đổi thì những thay đổi này cần phải được lặp lại ở mọi phần khác nhau của dự án.
Tôi biết rằng thư viện protobuf của Google cung cấp một loại giải pháp cho vấn đề này trong đó bạn viết cơ sở hạ tầng bằng một cú pháp đặc biệt và sau đó thư viện tạo ra một khai báo cấu trúc cho bạn bằng nhiều ngôn ngữ lập trình khác nhau. Nhưng điều này vẫn không giải quyết được vấn đề phải lặp lại logic xác thực cho các loại của bạn.
Có ai có bất kỳ đề xuất hoặc liên kết đến sách / bài đăng blog về điều này?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. Không phải nó không. Bạn có 4 hệ thống khác nhau làm những việc khác nhau. Bạn đang dùng DRY quá xa. Theo kinh nghiệm của tôi, Sắp xếp lại khả năng sử dụng lại mà bạn muốn làm là hạt giống của cái ác, bởi vì giới thiệu sự liên kết chặt chẽ. Điều đó thậm chí còn tồi tệ hơn việc lặp lại User
4 lần trong 4 ngôn ngữ khác nhau. Trong môi trường phân tán, khớp nối là một vấn đề. DRY thì không.