我使用boto3爲AWS設置了一些路由。注入符合通用接口的適配器的Pythonic方法
在AWS環境中,我們希望有一個類負責將路由撥入EC2 VPC。在非AWS環境中,它會執行其他操作。
在傳統的OOP方法我將具有限定announce_route
方法,例如的接口,並且創建AWSRouting或FoobarRouting的具體實例等
僞代碼來說明這種情況下:
interface Routing
function announceRoute()
class AWSRouting implements Routing
class RouteAnnouncer
function constructor(Routing routing)
根據某些環境變量或配置選項,我會將適當的路由實例注入播音員。
用依賴注入實現這種適配器模式的pythonic方式是什麼?到目前爲止,我還沒有看到任何爲構造函數或設置器定義依賴類型的方法。
這是我到目前爲止有:
class RouteAnnouncer:
def __init__(self, adapter):
self.adapter = adapter
def announce_route(self, ip_addr):
self.adapter.announce_route(ip_addr)
class AnnounceRouteContract:
def announce_route(self, ip_addr):
raise NotImplementedError
class AWSRouting(AnnounceRouteContract):
def announce_route(self, ip_addr):
pass
class StandardRouting(AnnounceRouteContract):
def announce_route(self, ip_addr):
pass
所以我覺得我真正缺少的還有就是如何告訴代碼,在RouteAnnouncer
適配器是用戶AnnounceRouteContract
的實例。
你有沒有看過[依賴注入 - python的方式](https://code.activestate.com/recipes/413268/)? –
幾乎每次你認爲你需要提供你錯的類的類型。擁抱鴨子打字。 –