W moim projekcie C ++ mam dwie klasy Particle
i Contact
. W Particle
klasie mam zmienną składową, std::vector<Contact> contacts
która zawiera wszystkie kontakty Particle
obiektu oraz odpowiednie funkcje składowe getContacts()
i addContact(Contact cont)
. Zatem w „Particle.h” dołączam „Contact.h”.
W Contact
klasie chciałbym dodać kod do konstruktora, aby Contact
ten wywołał Particle::addContact(Contact cont)
, aby contacts
był aktualizowany zarówno dla Particle
obiektów, między którymi Contact
obiekt jest dodawany. Dlatego musiałbym dołączyć „Particle.h” do „Contact.cpp”.
Moje pytanie brzmi, czy jest to akceptowalna / dobra praktyka kodowania, a jeśli nie, jaki byłby lepszy sposób na wdrożenie tego, co próbuję osiągnąć (po prostu, automatycznie aktualizując listę kontaktów dla określonej cząstki za każdym razem, gdy nowy kontakt jest tworzone).
Klasy te zostaną połączone razem Network
klasą, która będzie miała cząsteczki N ( std::vector<Particle> particles
) i styki Nc ( std::vector<Contact> contacts
). Ale chciałem particles[0].getContacts()
mieć takie funkcje - czy Particle
w tym przypadku można mieć takie funkcje w klasie, czy też istnieje lepsza „struktura” asocjacji w C ++ do tego celu (z dwóch powiązanych klas używanych w innej klasie) .
Może potrzebuję zmiany perspektywy w tym, w jaki sposób do tego podchodzę. Ponieważ obie klasy są połączone przez Network
obiekt klasy, czy typową organizacją kodu / klasy jest posiadanie przez Network
obiekt pełnej kontroli informacji o łączności (w tym sensie, że obiekt cząstek nie powinien być świadomy swoich kontaktów, a zatem nie powinien mieć getContacts()
członka funkcjonować). Następnie, aby wiedzieć, jakie kontakty ma konkretna cząstka, musiałbym uzyskać tę informację przez Network
obiekt (np. Za pomocą network.getContacts(Particle particle)
).
Czy mniej typowy (być może nawet zniechęcony) projekt klasy C ++ dla obiektu Particle miałby również tę wiedzę (tj. Miałby wiele sposobów dostępu do tych informacji - za pośrednictwem obiektu Network lub obiektu Particle, w zależności od tego, co wydaje się wygodniejsze )?
Network
obiekt klasy, który zawiera Particle
obiekty i Contact
obiekty. Mając tę podstawową wiedzę, mogę następnie spróbować ocenić, czy pasuje ona do moich konkretnych potrzeb, które wciąż są badane / rozwijane w miarę rozwoju projektu.