Trong dự án C ++ của tôi, tôi có hai lớp Particlevà Contact. Trong Particlelớp, tôi có một biến thành viên std::vector<Contact> contactschứa tất cả các liên hệ của một Particleđối tượng và các hàm thành viên tương ứng getContacts()và addContact(Contact cont). Do đó, trong "Particle.h", tôi bao gồm "Contact.h".
Trong Contactlớp, tôi muốn thêm mã vào hàm tạo cho lệnh Contactđó sẽ gọi Particle::addContact(Contact cont), để nó contactsđược cập nhật cho cả các Particleđối tượng mà Contactđối tượng đang được thêm vào. Vì vậy, tôi sẽ phải đưa "Particle.h" vào "Contact.cpp".
Câu hỏi của tôi là liệu điều này có được chấp nhận / thực hành mã hóa tốt hay không và nếu không, cách nào tốt hơn để thực hiện những gì tôi đang cố gắng đạt được (chỉ cần đặt, tự động cập nhật danh sách các liên hệ cho một hạt cụ thể bất cứ khi nào có liên hệ mới được tạo ra).
Các lớp này sẽ được liên kết với nhau bởi một Networklớp sẽ có các hạt N ( std::vector<Particle> particles) và Nc contact ( std::vector<Contact> contacts). Nhưng tôi muốn có thể có các hàm như particles[0].getContacts()- có ổn không khi có các hàm như vậy trong Particlelớp trong trường hợp này, hoặc có một "cấu trúc" liên kết tốt hơn trong C ++ cho mục đích này (của hai lớp liên quan được sử dụng trong lớp khác) .
Tôi có thể cần một sự thay đổi quan điểm ở đây trong cách tôi đang tiếp cận điều này. Do hai lớp được kết nối bởi một Networkđối tượng lớp, nên tổ chức mã / lớp điển hình có thông tin kết nối được kiểm soát hoàn toàn bởi Networkđối tượng (trong đó một đối tượng Hạt không nên biết về các liên hệ của nó và do đó, nó không nên có getContacts()thành viên chức năng). Sau đó, để biết những liên hệ nào mà một hạt cụ thể có, tôi sẽ cần lấy thông tin đó thông qua Networkđối tượng (ví dụ: sử dụng network.getContacts(Particle particle)).
Nó sẽ ít điển hình hơn (thậm chí có thể không khuyến khích) thiết kế lớp C ++ cho một đối tượng Hạt để có kiến thức đó, (có nghĩa là có nhiều cách để truy cập thông tin đó - thông qua đối tượng Mạng hoặc đối tượng Hạt, có vẻ thuận tiện hơn )?
Networkđối tượng lớp có chứa Particlecác đối tượng và Contactđối tượng. Với kiến thức cơ bản đó, sau đó tôi có thể cố gắng đánh giá xem nó có phù hợp với nhu cầu cụ thể của mình hay không, vẫn đang được khám phá / phát triển khi tôi đi cùng trong dự án.