簡體   English   中英

如何在symfony2捆綁軟件中實施策略模式?

[英]How to implement the strategy pattern in a symfony2 bundle?

假設我們有一個Symfony捆綁包,其中包含一個服務,該服務的依賴項由接口定義(策略模式)。 我也有在同一個包中定義的接口的幾種實現(即策略)。 每種策略可能還具有各種其他依賴性,需要進一步配置。 因此,捆綁包中的我的services.yml可能如下所示:

services:
  my_service:
    class: MyBundle\Services\MyService
    arguments: ['@my_strategy']
  my_strategy_service_1:
    class: MyBundle\Services\MyStrategyService1
  my_strategy_service_2:
    class: MyBundle\Services\MyStrategyService2
    argument: [@my_memcache]

我可以在應用程序的config.yml中選擇實現。

services:
  my_strategy:
    alias: my_strategy_service_2
  my_memcache:
    class: Memcached
    calls:
      - [ addServer, [%memcache_host%, %memcache_port%] ]

讓我們堅持這個例子,並更改實現。 如果我在應用程序中寫config.yml:

services:
  my_strategy:
    alias: my_strategy_service_1

不幸的是,即使這次沒有使用它,但僅在包中定義了它,仍然需要我定義“ my_memcache”服務。 我該如何處理呢? 僅當“ my_strategy_service_2”確實使用時,我可以強制檢查其依賴性嗎?

通常,我在上下文和策略使用之間實現“注冊”:

  1. 定義所有可能的策略(服務),然后標記它們
  2. 通過我通過標記(通過編譯器傳遞 )獲取所有可能的策略(服務)來定義寄存器
  3. 通過寄存器檢索策略(通過注入配置參數或通過在調用函數以查找正確策略時傳遞該參數)
  4. 使用策略

希望很清楚

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM