簡體   English   中英

如何在 CodeIgniter 中為通用任務實現觀察者模式

[英]How to implement Observer pattern in CodeIgniter for generic tasks

我正在經典 CI mvc 設置中構建應用程序,其中用戶具有通用/通用任務列表。 任務的主要目的是告訴用戶他必須完成一個特定的動作,並將他重定向到他需要完成這個動作的頁面。

以一種非常簡單的方式,任務的 db 方案如下所示: 在此處輸入圖片說明

它自己的任務列表將是一個重定向用戶的列表: 在此處輸入圖片說明

我的問題是當用戶被重定向到需要發生操作的特定頁面時,我們會丟失特定任務的上下文。 因此,即使任務完成(在本例中,例如文檔被上傳),任務本身也不知道這一點,我們也沒有真正的連接來更新任務。

經過一些研究,觀察者設計模式看起來可以滿足這一需求。 但是在所有的例子中,我都沒有提到如何在我們當前的系統中實際實現這一點。

在處理文檔上傳的控制器中,函數 upload_doc(){} 成功執行后,還應更新連接或訂閱此文檔上傳的任務。

class Dashboard extends MY_Controller{

public function __construct()
{
    parent::__construct();

    // Force SSL
    $this->force_ssl();
}

public function upload_doc(){
   //Handle doc upload and update task
}
}

任何人都可以以 noobfriendly 的方式幫助我如何在 CI 框架中實現此設置?

提前致謝!

如果涉及到設計模式,我總是試圖找到一個參考文檔/github 存儲庫,其中包含所請求語言的設計模式示例。 對於 PHP,我可以在這里熱烈推薦這個:

https://designpatternsphp.readthedocs.io/en/latest/Behavioral/Observer/README.html

示例實現可能如下所示。 注意:我沒有使用 CodeIgniter 的經驗。 這只是說明如何使用給定代碼示例實現這一點的一種方式。

class Dashboard extends MY_Controller 
{
    private function makeFile()
    {
        // I would put this method into a file factory within your container.
        // This allows you to extend on a per module-basis.

        $file = new File();        
        $file->attach(new UpdateTask);
        $file->attach(new DeleteFileFromTempStorage);
        $file->attach(new IncrementStorageSize);
        $file->attach(new AddCustomerNotification);
        return $file;
    }

    public function upload_doc() 
    {
        // My expectation is that you have some task-id reference 
        // when uploading a file. This would allow all observers 
        // to "find" the right task to update.
        $file = $this->newFile();

        // enhance your file model with your request parameters
        $file->fill($params);

        // save your file. Either your model has this functionality already
        // or you have a separated repository which handles this for you.
        $fileRepo->persist($file);

        // Finally notify your observers
        $file->notify();  
    }
}

希望這可以幫助。

如果我理解你的問題和意圖是正確的(在一個地方創建的記錄和在別處發生的某些動作之間建立關系),那么觀察者(如果我們指的是同一本書中的相同想法)將無法解決它,由於 PHP 和 Web 的通用無狀態特性,即跨越多個程序調用的執行,它甚至不適用於此處。 GoF 書中的經典模式是為單個程序中的單個執行而設計的。

您需要連接自定義邏輯,將任務記錄和隨后的用戶操作綁定在一起。 最簡單的方法是將帶有任務 ID 的 cookie 添加到用戶的瀏覽器,以便文檔上傳控制器可以訪問該 ID,並且它會更新系統的其余部分。 在那里你可以使用經典的觀察者,就像克里斯托夫的回答或互聯網上的任何其他例子一樣。

暫無
暫無

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

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