Có rất nhiều loại mối quan hệ - xem xét
- ô tô và Wheels
- ô tô và lái xe
- ô tô và đăng ký Chủ đầu tư
- khách hàng và Lệnh và Lệnh Dòng
- Trường học và Lớp học và thể hiện của Lớp
Nếu bạn xem mô hình UML, bạn sẽ thấy các khái niệm như Cardinality và Direction và distictions giữa Aggegration and Composition và các câu hỏi liên quan đến vòng đời của các đối tượng liên quan.
Thật không ngạc nhiên khi chúng tôi cần một loạt các kỹ thuật và mẫu để xử lý các loại mối quan hệ khác nhau.
Về d). Có một nguyên tắc quan trọng là Law of Demeter hoặc nguyên tắc ít kiến thức nhất.
Một kỹ thuật quan trọng là sau đó, Đóng gói giảm khớp nối bằng cách ẩn thông tin. Ô tô có thể có ít quan tâm đến nhiều chi tiết của mọi người, vì vậy chúng tôi có thể có một giao diện IDriver trên lớp Person của chúng tôi, IDriver cung cấp các phương pháp cụ thể mà ô tô quan tâm. Nguyên tắc chung là ưu tiên lập trình cho các giao diện.
Sau đó, chúng ta có thể suy nghĩ về a). Sự sáng tạo.Vì chúng ta đang có xu hướng sử dụng Giao diện, nên thường sử dụng các mẫu Nhà máy. Điều đó không để lại câu hỏi ai gọi cho nhà máy. Chúng ta thích:
IPerson aPerson = myAutomobile.createDriver(/* params */);
hoặc
IPerson aPerson = aPersonFactory.create(/* params */);
myAutomobile.addDriver(aPerson);
Ở đây tôi nghĩ nó khá rõ ràng rằng Ô tô không biết nhiều về con người, và do đó thứ hai là bộ phận tốt hơn về trách nhiệm. Tuy nhiên có lẽ Đơn đặt hàng có thể tạo một cách hợp lý OrderLines, Classes tạo ClassInstances?
b). Theo doi? Đó là lý do tại sao chúng tôi có nhiều bộ sưu tập các lớp học. Mà những người sử dụng phụ thuộc vào bản chất của mối quan hệ (một-một, một-nhiều, vv) và cách chúng tôi sử dụng nó. Vì vậy, chúng tôi chọn Mảng và HashMaps, vv theo nhu cầu. Đối với ô tô/bánh xe, chúng tôi thậm chí có thể sử dụng các thuộc tính tên của xe - sau khi tất cả xe có chính xác sáu bánh xe (frontLeft, frontRight, backLeft, backRight, dự phòng và lái). Nếu bằng cách "lưu trữ" bạn có nghĩa là tồn tại, thì chúng ta đang xem xét các kỹ thuật như các khóa ngoại trong một cơ sở dữ liệu quan hệ. Việc ánh xạ giữa RDBMS và các đối tượng trong bộ nhớ ngày càng được quản lý bởi các cơ chế bền vững tốt đẹp như JPA.
c). Kiểm toán? Tôi chưa thấy kiểm toán được áp dụng cụ thể ở cấp độ mối quan hệ. Rõ ràng phương thức Automobile.addDriver() có thể phức tạp tùy ý. Nếu có yêu cầu kinh doanh để kiểm tra hành động này, thì rõ ràng đây là một nơi phù hợp để làm điều đó. Đây chỉ là một câu hỏi thiết kế OO tiêu chuẩn xoay quanh những người sở hữu thông tin. Nguyên tắc chung: "Không lặp lại chính mình" vì vậy khá rõ ràng chúng tôi không muốn mọi đối tượng gọi addDriver() cần phải nhớ để kiểm toán, do đó đó là công việc của Auto.
Tôi cũng có câu hỏi liên quan mà tôi đã thêm ở đây .. http://stackoverflow.com/questions/3186632/a-design-for-adding-resources-to-a-project – Amitd