私はRESTクライアントライブラリに取り組んでいます。最近、バッチメッセージを送信するためのサポートを追加する作業を開始しました。同じシグネチャのメソッドを含む2つのPythonクラスを統合するには?
しかし、私は現在のデザインが好きではありません。同一のメソッドシグネチャで大きなClientおよびRequestMessageクラスを維持する必要があります。
私は2つのクラスを統合する方法を探しています。
元Clientクラスのメソッドは、要求準備し、送信するために必要なすべてのコードを含んでいた:
class Client(object):
def __init__(self, config):
self.request = Request(config, "application/json")
def create_vertex(self, data):
path = "vertices"
params = remove_null_values(data)
self.request.post(path, params)
バッチメッセージのサポートを追加するには、私は、各クライアントのメソッド内のコードの中身を取り出して、あなたは準備が整うまで、あなたが、それを送信せずにバッチにメッセージを追加することができるように個別の要求メッセージクラスにそれを置く:
class Client(object):
def __init__(self, config):
self.request = Request(config, "application/json")
self.message = RequestMessage(config)
def create_vertex(self, data):
message = self.message.create_vertex(data)
return self.request.send(message)
# ...more REST client methods...
def batch(self, messages):
path = "batch"
params = messages
return self.request.post(path, params)
class RequestMessage(object):
def __init__(self, config):
self.config = config
def create_vertex(self, data):
path = "vertices"
params = remove_null_values(data)
return POST, path, params
# ...more REST client methods...
しかし、今あなたがクライアントを維持する必要があるため、私はデザインが好きではありませんとRequestMessageクラス - 2つの大きなクラスsと同じ署名を持つ。
はここでバッチクラスは次のようになります。
class Batch(object):
def __init__(self, client):
self.client = client
self.messages = []
def add(self, message):
self.messages.append(message)
def send(self):
return self.client.batch(self.messages)
ここでは、サーバー上の頂点を作成するための使用例です:
>>> client = Client(config)
>>> vertex = client.create_vertex({'name':'James'})
ここでは、サーバー上の頂点のバッチを作成するための使用例を示します:
>>> message1 = client.message.create_vertex({'name':'James'})
>>> message2 = client.message.create_vertex({'name':'Julie'})
>>> batch = Batch(client)
>>> batch.add(message1)
>>> batch.add(message2)
>>> batch.send()
バッチはクライアントよりも頻繁に使用されないので、 rmalクライアントインターフェイスを使用するのが最も簡単です。
ここに1つのアイデアですが、私はそれを達成するためにどのように非常にわからないか、何か他のものが良いだろうとします
>>> vertex = client.create_vertex(data)
>>> message = client.create_vertex(data).message()
こんにちはカール - バッチは、別のコマンドを含めることができる必要があります - create_vertex、create_edge、index_vertex。クライアントでバッチモードを設定する方法を見ていきます。 – espeed
ええ、クライアントをサブクラス化してBatchClientを作成し、各リクエストをただちに送信するのではなく、バッチリストにコマンドを追加することができます。 – espeed