Tóm tắt: Có một mẫu thiết kế tốt để giảm trùng lặp thông tin giữa các giá trị phụ thuộc chặt chẽ không?
Trong công việc của tôi, nó khá phổ biến để có mối quan hệ giữa các đại lượng để bạn có thể lấy được một trong các đại lượng nếu bạn biết các đại lượng khác. Một ví dụ có thể là luật khí lý tưởng :
Pv = RT
Bạn có thể tưởng tượng việc tạo ra một lớp để thể hiện trạng thái của một loại khí lý tưởng. Lớp sẽ có 3 thuộc tính, một cách tự nhiên Pressure, Temperaturevà SpecificVolumemỗi một loại thích hợp.
Đối với người dùng của một đối tượng của lớp này, có vẻ như sẽ tự nhiên mong đợi rằng nếu bạn đặt giá trị cho cả hai Pressurevà Temperature, sau đó bạn có thể đọc ra một giá trị cho SpecificVolumevà mong muốn đối tượng đã tính toán điều đó cho bạn.
Tương tự, nếu bạn đặt giá trị cho cả hai Pressurevà SpecificVolume, sau đó bạn có thể đọc ra Temperature, v.v.
Để thực sự thực hiện lớp này tuy nhiên đòi hỏi một số thông tin trùng lặp. Bạn sẽ cần lập trình rõ ràng tất cả các biến thể của phương trình, coi một biến khác nhau là phụ thuộc trong từng trường hợp:
T = P * v / RP = R * T / vv = R * T / P
mà dường như vi phạm nguyên tắc DRY . Mặc dù mỗi biểu hiện mối quan hệ giống nhau, các trường hợp này yêu cầu kiểm tra và mã hóa độc lập.
Trong trường hợp thực, logic tôi nghĩ là phức tạp hơn ví dụ này, nhưng thể hiện cùng một vấn đề cơ bản. Vì vậy, sẽ có giá trị thực sự nếu tôi chỉ có thể diễn đạt logic một lần, hoặc ít nhất là ít lần hơn.
Lưu ý rằng một lớp như thế này có lẽ cũng sẽ phải đối phó với việc đảm bảo rằng nó được khởi tạo đúng trước khi các giá trị được đọc ra, nhưng tôi nghĩ đó là một sự xem xét thứ cấp.
Mặc dù tôi đã đưa ra một ví dụ toán học, câu hỏi không chỉ giới hạn trong mối quan hệ toán học giữa các dữ liệu. Đó dường như chỉ là một ví dụ đơn giản để đưa ra quan điểm.
Pv/T != R. Không chắc chắn nếu ý tưởng đó có thể giúp bạn giải quyết các vấn đề tiềm ẩn, hoặc nếu điều đó thậm chí làm phức tạp nó.