Actors
に関連付けられているものは作成しませんWorld
。次の2つのコードフラグメントのいずれかを使用することを考えています。これらのどれがより良いデザインと考えられていますか?つまり、ソースコードのメンテナにとって読みやすく、コードを読んでいるだけの人にとって読みやすく、将来の調整に対してより柔軟になります。
同様の質問がすでに出されている場合は申し訳ありませんが、このような概念がOOPでどのように呼ばれているのかはよくわかりません。
オプションA:
// 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();