Sınıfları düzenlemek ve bunları adlandırma hakkında bir soru

6 Cevap php

RAR, ZIP ve Seyahat: ben sınıfları bir dizi yazıyorum. Hepsinin ortak bir ilgiyi paylaşırlar: arşiv formatları vardır. Yani, başlangıçta bu yapıyor düşündüm:

1) bir baz soyut bir sınıf yazın

abstract class Archive {}

ve "kütüphaneler / arşiv / archive.php" yerleştirin.

2) Yaz zip, rar ve açma sınıfları

class Archive_Zip extends Archive {}

ve "kütüphaneler / arşiv / zip.php" yer onları

3) Bu gibi belirli bir sınıf (örn. Zip) erişin

$this->archive->zip->...

Bu benim ilk yaklaşım oldu. Ancak, bu iyi bir yaklaşım olduğunu düşünüyor musun? Ilk yerde onları ben bile soyut mıyım? (Ayrı ve tüm diğerleri) bir "kütüphaneler / zip.php" dosyası yazma artıları ve eksileri nelerdir?

Benim yaklaşıma karşı herhangi bir öneri veya argümanlar var mı? Ben yaptım kötü bir şey var mı?

6 Cevap

Ben Zend Framework yaklaşım gibi.

Dosyalar:

lib/Archive.php
lib/Archive/Zip.php
lib/Archive/Rar.php

Kod:

require_once 'Archive_Zip';
$zip = new Zip();

Bu bakınız: http://framework.zend.com/manual/en/coding-standard.naming-conventions.html#coding-standard.naming-conventions.classes

3. Gerçekten # 1 veya # 2 alternatif bir yaklaşım, takip etmiyor beri böyle .. ihtiyacınız olduğunda sadece nesne örneğini için:

$archive = new Archive_Zip();

Bitti. Gereğinden fazla karmaşık hale gerek yok.

Soyut bir sınıf ana yararı kod boyunca kullanabileceğiniz ortak bir arayüz. Daha sonra kod bir demet değiştirmeden başka bir arşiv biçimi için uygulama geçiş mümkün olacak. Ben PHP çok kullanılan değil, bu nedenle bu sorunun cevabı genel OOP ilkelerine dayanmaktadır. Bu operasyonların bir dizi ortak paylaştıkları arşivlerini yaklaşım için iyi bir aday olacak gibi görünüyor.

Bu uygulanmasına bağlıdır. Hangi sıkıştırma algoritması kullanılacağını belirlemek için bir strateji desen kullanacak mı? Sıkıştırma algoritmaları onları soyut kodun diğer bit arasında birbirinin yerine kullanılabilir olabilir eğer.

Onlar aynı sözleşmeye uymak ve ortak işlevselliği paylaşmak gerekir? Muhtemelen. Bu soyutlama iyi kullanımıdır.

Sadece size okunabilirlik uğruna bir mantıksal ilişki oluşturmanıza yardımcı olur Ayrıca, eğer, bunun için gidin. O benim almak bulunuyor.

Şahsen ben soyut sınıflar için çok kullanmak olmadı. En iyi ihtimalle, onlar sizin alt sınıf içerisinde yöntemleri bir dizi tanımladık sağlayarak, kendi kod üzerinde bir kontrol gibi görünüyor.

Kendisi de size yapacağız miras, ve alt sınıfları için ortak yöntemler vardır eğer bir taban Arşiv sınıf için yardımcı olacaktır.

Arşiv temel sınıf olan hakkında çok şey, bu sorun, gerçekten arşiv biçimine bakılmaksızın, arşiv dosyaları işlemek için istemci kodu için kamu yöntemleri bir dizi tanımlamak için size rehberlik gerektiğidir. (Aynı şeyi yapmak için başka bir yol, tüm diğer sınıflar uygulamak Arşiv arayüzü tanımlamak olacaktır Ama tüm sınıfların bazı ortak kod ile bitireceğiz şüpheli;. Verir baz sınıf olarak Arşivi sahip koymak için iyi bir yer.)