Ví dụ:Cách tốt nhất để điều hướng một cây phức tạp của các đối tượng khác nhau là gì?
class Vehicle {
Collection<Axle> axles;
}
class Axle {
Collection<Wheel> wheels;
}
class Wheel {
// I think there are dually rims that take two tires -- just go with it
Collection<Tire> tires;
}
class Tire {
int width;
int diameter;
}
Tôi có một dịch vụ mà qua đó tôi có thể có được một bộ sưu tập của tất cả các đối tượng xe tôi biết về. Bây giờ nói rằng tôi có một lốp xe có chiều rộng và đường kính cụ thể, và tôi muốn tìm một chiếc xe có thể mang nó. Cách đơn giản là có một bộ bốn vòng lồng nhau, như vậy:
for (Vehicle vehicle : vehicles) {
for (Axle axle : vehicle.getAxles()) {
for (Wheel wheel : axle.getWheels()) {
for (Tire tire : wheel.getTires()) {
if (tire.width == targetWidth
&& tire.diameter == targetDiameter) {
// do something
break;
}
}
}
}
}
Có mẫu thiết kế tốt cho điều này không? Hoặc một cấu trúc dữ liệu tốt hơn để sử dụng? Nó sẽ được tốt hơn để chỉ giữ một chỉ số một nơi nào đó của thông tin lốp ánh xạ tới xe?
chỉnh sửa: trả lời câu hỏi từ ý kiến
Bạn có thể kiểm soát cấu trúc của dữ liệu bạn nhận được từ các dịch vụ?
Có
Bạn cần phải tìm kiếm cho lốp xe khác nhau nhiều lần trong cùng một dữ liệu?
Có
là hiệu suất là một vấn đề?
Không đặc biệt
Khi bạn tìm thấy lốp, bạn chỉ cần biết đó xe chứa nó hay bạn cũng cần trục và bánh xe?
Đôi khi chỉ là phương tiện, đôi khi chỉ cần trục - hai hoàn cảnh khác nhau
Bạn có cần tham chiếu đến lốp đã được tìm thấy?
Vâng, trong các trường hợp mà tôi cần trục
edit2: Mở rộng ẩn dụ hơn nữa, để giải thích hai bối cảnh trên:
Bối cảnh 1 - Tôi muốn biết xe, vì vậy tôi có thể gửi một nhân viên ra ngoài để lấy xe và mang nó trở lại
Bối cảnh 2 - Tôi muốn biết trục và lốp xe, vì tôi đang ở phương tiện đang cố gắng thực hiện công việc
Nó phụ thuộc ... Bạn có kiểm soát cấu trúc dữ liệu bạn nhận được từ dịch vụ? Bạn có cần tìm kiếm các loại lốp khác nhau nhiều lần trong cùng một dữ liệu không? Hiệu suất có phải là vấn đề không? Khi bạn tìm thấy lốp xe, bạn chỉ cần biết chiếc xe có chứa nó hay bạn cũng cần trục và bánh xe? Bạn có cần tham chiếu đến lốp xe đã được tìm thấy không? – Cinnam
Tôi đã trả lời trong bài đăng. Cảm ơn bạn đã tìm kiếm! –
Vấn đề này có vẻ khiến tôi liên quan đến Luật Demeter (nguyên tắc này nhiều hơn một "luật"). Xem http://stackoverflow.com/q/12284057/1168342 – Fuhrmanator