これが状況です。私は次の疑似クラスを持っています:
class Agent:
def __init__(self):
self.blah = whatever
self.boo = thingy
def doA(self, transport):
res = transport.doX(self.blah)
def doB(self, transport):
res = transport.doY(self.boo)
class Transport:
def __init__(self):
self.bah = weee
def doX(self, item):
#.. do some other stuff here
def doY(self, item):
#.. do some more stuff here
さて、私の質問は、トランスポートオブジェクトをそれを必要とするメソッドのAgentメソッドに渡すのか、それとも単にTransportオブジェクトをAgentコンストラクターに渡して、メソッド内から呼び出すのかということです。すなわち
transport = Transport()
agent = Agent(transport)
class Agent:
def __init__(self, transport):
self.blah = whatever
self.transport = transport
def doA(self):
res = self.transport.doX(self.blah)
Transportを独自のクラスに移動した理由は次のとおりです。
1)エージェントインスタンスは同じトランスポートオブジェクトを共有できます。つまり、エージェントのセットに必要なトランスポートオブジェクトは1つだけです。複数のトランスポートを持つことができます(1つはagentsA..N用、もう1つはagentsO..Z用)。
2)トランスポートには、エージェントのリストを引数として取るメソッドが含まれています。たとえば、エージェントオブジェクトのリストを指定して、エージェントへの同時通信テストを実行できます。
ただし、エージェント自体は、Agentクラスに含まれる意味のあるメソッド(エージェントをリモートで再起動するなど)の一部について、トランスポート(SSL証明書の場所など)に設定された属性を必要とする場合があります。
エージェントのリストを必要とするメソッドを取得し、それらをTransportのクラスメソッドに移動してから、Transportインスタンスを含むAgentオブジェクトに属性を作成する必要がありますか?実行していることを続行し、Transportオブジェクトを特定のAgentオブジェクトメソッドに渡すことだけを要求する必要がありますか?表示されていない方法でこれをすべてリファクタリングする必要がありますか?
ご意見をいただければ幸いです。