Iki etkileşim sınıflar için OOP tasarım yaklaşımı

3 Cevap php

Yuvalama sınıflara göre; derslere birlikte zincirleme (başka oluşturmak için bir sınıfın sonuçlarını kullanarak ya da daha doğrusu) göreceli avantajları / dezavantajları nelerdir?

Benim kullanıcı / doğrulama sisteminin yeniden yapılandırılması için çalışıyorum ve olup olmadığını merak ediyorum;

  • myAuthClass bir yarar olarak hareket ve log-in başarılı olursa, sadece yeni bir myuserclass nesne oluşturmak gerekir
  • veya myAuthClass dahili myuserclass oluşturmanız gerekir olmadığını (yani $ this-> user = new myuserclass)
  • ya myuserclass sadece myAuthClass aramalıyız bile gerekli olduğunda (yani bir kullanıcı oturum açmaya çalıştığında) ve gerektiğinde iç yapısını (vb yeni e-posta, sık, cart,) güncelleyin.

Anlayacağınız gibi ben bir cepten n00b biraz değilim. Concpetually Ben yöntemlerinin her biri için bir davayı yapmak mümkün gibi görünüyor, bu yüzden çeşitli yaklaşımların + ves /-ves ile ilgili diğer insanların işitme ilgileniyorum.

Şerefe.

3 Cevap

Soyut bir arayüz karşı somut uygulamaları ve karşı değil programlanmış olduğu bir accademic açıdan bakıldığında, bütün 3 seçenek yanlıştır. Gibi doğrudan yeniden sınırlar, birbirine bağlanır - her iki ya da değil tüm bunları yeniden kullanabilirsiniz.

Sen IUserClass veya IAuthClass oluşturmak ve somut bir sınıfa bu soyut arabirimini uygulayan ve sonra doldurmak için kimlik doğrulaması veya kullanıcı sınıfı karşı kimlik doğrulaması için IAuthClass bir uygulama verildiğinde auth sınıf uygulaması bir IUserClass aldı bir durum için giderdim olabilir .

Her senaryoda bu en flexability verir, şöyle auth sınıf tekrar kullanılabilir ve KullanıcıSınıfı farklı sürümleri oluşturulabilir veya kullanıcı sınıfı sürece IAuthClass gelen devralır gibi, birden fazla farklı kimlik doğrulama mekanizmaları kullanma yeteneği vardır.

(Bu IAuthClass uygulayan) kullanıcı sınıf bir kimlik doğrulama nesne verme İkinci yaklaşım, kullanıcı sınıfı daha az değiştirmek istiyorsunuz iken bu kimlik doğrulama mekanizmaları, hatta tek bir uygulama ile, farklı, benim tercih olacaktır. Ama doğru olduğu, ne bir somut uygulamaya dayalı olmalıdır.

Bu ancak üstünden olarak görülebilir, bu yüzden bir karar çağrısı.

Öncelikle ben size adaptör desen kullanmanızı öneririm. Eğer kimlik belirli bir tip uygulayan bir sınıf oluşturmak daha Sen arabirimini (kamu yöntemleri) tanımlayan soyut bir sınıf olması gerekir. Örneğin DB baz kimlik, LADP kimlik vs .. için biri için bir sınıf / adaptörü oluşturabilirsiniz ..

Yerine tekerleği yeniden icat en iyi şey, bir hazır çözüm kullanmak gerekir. Ben adaptör desen uygular Zend_Auth, kullandık. Zend_Auth kullanarak iyi OOP uygulamaları-, adaptör desen, arayüzler ve soyut sınıfların kullanımı, isterseniz anlayabiliyorum.

Burada ben bir intranet için Zend_Auth nasıl kullandıklarını görebilirsiniz;

        protected function Authentication() {
		$strEmail = trim($this->txtEmail->Text);
		$this->txtPassword->Text = trim($this->txtPassword->Text);
		// do the process of authentication, AD and then DB
		// Get a reference to the singleton instance of QAuth
		$auth = QAuth::getInstance();
		// Set up the authentication adapter
		$authAdapter = new QAuth_Adapter_WebService(__LOGIN_WS_URL__, 
			$strEmail, $this->txtPassword->Text
		);

		// Attempt authentication, saving the result
		$result = $auth->authenticate($authAdapter);

		if ($result->isValid()) {
			$objUser = User::LoadByEmail($strEmail);

			// if there is not a user's record create one
			if(!$objUser) {
				$this->User_Create($strEmail);
				$objUser = User::LoadByEmail($strEmail);
			}

			$crypt = new Encryption();
			$encr = $crypt->encrypt(__KEY__, $objUser->UserID);				
			$_SESSION['user_id'] = $encr;
			setcookie('user_id', $_SESSION['user_id'], time()+(3600*24*365*20));
			$this->Intranet1Integration($objUser->UserID);
			QApplication::Redirect('http://'.__URL__.'/index.php');		
		}
		else {
			QApplication::DisplayAlert(
				'Log on failed. You must provide a Company email and a correct password.'
			);
		}
	}

Sınıfları zincirleme ana avantajı bu yüzden bir başka kesinlikle hayır (ya da çok az) etkisi vardır değiştirerek, onları birbirlerinden independant yapıyor. Örneğin, kullanıcıyı değiştirmek gerekir, ve tersi olmaz, Authentification yöntemini değiştirmek istiyorum söylüyorlar.

Diğer küçük avantajlar iki yöntem için de çıkıp, ancak bu idame burada ana bir