關於緩衝的話題

來源:互聯網
上載者:User
當前狀況 有一個項目,大家都直接使用Yii::app()->memcache->get方法從緩衝中擷取資料。咋一看,好像沒有什麼不妥。但是隨著項目的擴大,流程越來越複雜,緩衝內容的增多,這個方法所帶來的隱患就越發明顯了。每一次的改版或資料變動,都需要尋找一大片的代碼進行修改(有可能還會有隱式的組裝調用)。哪怕漏掉了一個地方沒有更正過來都會造成系統的BUG,甚至是找不到根源的未知錯誤。 面對以上問題,我說說我的改進方案。以下的改進方法僅代表我的個人看法,如果有更好的方法,歡迎大家一起討論。  最佳化改進 電腦界有句老話,大意是:只要再多添一層間接,電腦科學中就沒有解決不了的問題(引用自《Object-C基礎教程》第19頁)。我的處理方法就是增加一層,避免下層及協作開發人員直接接觸到資料。為避免緩衝過多容易造成混亂,我們需要對緩衝進行歸類封裝。以網店的緩衝為例: [php]  class EShopCache{      private $_cacheKey = array(‘userName’,’shopTitle’,’isValPro’,’isValShop’);      private $_cache = array();    public function __get($key) {      if ( array_in($key, $this->_cacheKey) ){          if ( !array_key_exixts($key, $this->_cache) ) {              $this->_cache[$key] = Yii::app()->memcache->get($key);          }          return $this->_cache[$key];  }  return false;  }  }   這樣改進之後,不但使用方法更簡單,而且更具語義化。[php]  $eshopCache = new EShopCache;  echo $ eshopCache ->username;  if ( $ eshopCache ->isValShop == 1 ) {      echo ‘網店已經進行實體認證’;  }   如果需求有變更需要對資料費進行修改,我們只需要對這個類進行修改,不需要對下一層的每一個介面進行修改,也不用擔心忘了修改下層的封裝及隱蔽調用。  持續改進 還有一個問題,如果需求再變化。網店要顯示的是使用者自訂的暱稱(nickName),而不再是使用者名稱(userName),難道我們只能翻遍檔案修改了嗎?改進方案如下: [php]  class EShopCache{      private $_cacheKey = array(‘userName’,’shopTitle’,’isValPro’,’isValShop’);      private $_aliaeses = array(‘userName’=>’nickName’);       private $_cache = array();    public function __get($key) {      if ( array_in($key, $this->_cacheKey) ){          if ( !array_key_exixts($key, $this->_cache) ) {              $_key = array_key_exists($key, $this->_aliases)? $this->_aliases[$key] : $key;              $this->_cache[$key] = Yii::app()->memcache->get($_key);          }          return $this->_cache[$key];  }  return false;  }  }   到此,這個類的功能已經可以滿足我們使用。我提供的方案就是使用設計模式中的“代理模式”來間接地訪問快取資料。如果有什麼異議,歡迎大家發郵件到yagas@sina.com 共同討論。 

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。