2010-09-13 62 views
3

我寫了一個網址路由器在Python 3.1,不知是否是多口味的問題使用下列變量之一:構造PARAMS與方法調用

元組作爲構造PARAMS:

router = Router( 
    (r"/item/{id}", ItemResource()), 
    (r"/article/{title}", ArticleResource()) 
) 

方法調用

router = Router() 
router.connect(r"/item/{id}", ItemResource()) 
router.connect(r"/article/{title}", ArticleResource()) 

你看不到任何優勢或總排行ges在這裏?

回答

2

我贊成傳遞元組構造的原因有兩個亞歷克斯沒有提及(至少沒有明確)。

  1. 可讀性。如果對於代碼的任何讀者都清楚,Router實例需要一個可用的路由列表。

  2. 失去耦合。客戶端代碼不必擔心初始化路由器實例。這是Router類的職責。

如果這是笨重的感覺給你,我會建議打破路由器全班分成更小的類,然後把這些類的實例Router.__init__。例如,在這裏你可以有一個RoutesList類:

routes = RoutesList((r"/item/{id}", ItemResource()), 
        (r"/article/{title}", ArticleResource())) 

router = Router(routes) 

這買你兩期建設亞歷克斯提到的靈活性,而且還可以防止客戶端代碼被從初始化路由器類負責。這仍然保留可讀性,因爲您必須向後閱讀以查看什麼是routes,而不是轉發(如果您沒有記住)。它還有一個額外的優點,即如果你決定改變你如何表示你的路由,那麼Router類應該不必改變:所有這些改變應該被封裝在RoutesList類中(或者甚至可以在未定義路由類)。

或路線可能僅僅是一個元組列表,你可以有一個模塊級功能映射到控制器的路線;)

0

除非該參數是強制性的,否則您可以使用方法調用方法,如果您將來需要添加更多方法,該方法會更加靈活。

如果您的實例必須同時使用這兩個參數才能生效,請使用構造函數方法。

2

傳統的OOP視圖是構造函數應該保證一個對象處於最終的可用狀態 - 也就是說,狀態可能會發生變化,當然,如果有動態變化的需求(例如有一個disconnect方法去與connect,以及一個實際的應用程序的要求,以使在操作過程中路由的動態變化?),但它「應該」保持可用,從物體出生到它消失的時刻。

在現實世界中,有時也被稱爲「兩階段建設」的可選模式(儘管這可能不僅僅是兩個過程階段,因爲你一直在打connect ;-)可能有一定的優勢靈活性 - 持久化和持久化對象,依賴於配置文件構建它們,緩解依賴注入和嘲諷(因此測試)。

無論你實際上利用這些靈活性方面的優勢的時候,是你能回答好於我們......既然你最好知道OO開發應用的具體要求和自己的技能和喜好的問題,測試,& c。如果你是而不是,實際上,要使用靈活性方面,那麼完全省略它們就更簡單了,並且採用「傳統的自給式構造函數」OOP方法。

+0

沒有什麼在OOP,說所有的對象是隻讀的,並在他們的最後施工後的狀態。可用,是的,但空路由表可用,但不是很有趣。 – stonemetal 2010-09-13 19:16:10

+0

@stone,正如我所說的,「當然,國家可能會發生變化」(否則我們會考慮FP,而不是OOP ;-)。 – 2010-09-14 00:04:44

0

由於您正在構建路由器以將Web請求路由到適當的資源,因此您還可以查看路由。它允許您將URL映射到應用程序的操作。

+0

謝謝,我知道路線,但它不符合我的需求。 – deamon 2010-09-13 18:28:31

相關問題