Я не создам Actors
, которые привязаны к World
. Я думаю использовать один из двух следующих фрагментов кода. Какой из них считается лучшим дизайном? К лучшему я имею в виду, более читаемый для поддерживающего код, более читаемый для кого-то, просто просматривающего код, более гибкого для будущих корректировок и т. Д.Какой из них лучший дизайн?
Прошу прощения, если аналогичный вопрос уже задан, 'действительно знаю, что такое понятие называется в ООП.
Вариант А:
// declaration:
class World {
public:
RegisterActor(Actor* a);
};
class Actor {
public:
Actor(World& w) {
w.RegisterActor(this);
}
foo();
};
// usage:
World myWorld;
Actor myActor(myWorld);
myActor.foo();
Вариант B:
// delcaration:
class Actor;
class World {
public:
Actor& CreateActor();
}
class Actor {
friend class World;
public:
foo();
private:
Actor();
};
// usage:
World myWorld;
Actor& myActor = myWorld.CreateActor();
myActor.foo();
В любом случае у вас есть круговая зависимость между актерами и мирами. Вы уверены, что вам это нужно? –
Не обязательно. Вариант A никогда не хранит ссылку на World, а в варианте B «Актер» никогда ничего не знает о «Мире». В основном, что я хочу, это объект «Мир», содержащий список обо всех «Актерах» в «Мире». Однако возможно, что в будущем потребуются круговые зависимости. «Актеру», возможно, придется взаимодействовать со всеми другими «Актерами». –
Но в коде есть циклическая зависимость. «Актер» должен знать о «Мире» и наоборот. Это часто плохая идея. –