(Not:. Bu this question ile ilgili, ama o daha açık bir şekilde yazılmış olabileceğini düşünüyorum, bu yüzden tekrar deniyorum edilir - benim güncelleştirme yalnızca sınırlı bir ölçüde yardımcı)
Ben çok sayıda bölümleri ile karmaşık bir form oluşturur bazı kod devralınan ve olası manzaralı bir sürü, bir dizi parametre bağlı ettik. Ben bir süre onunla çalışmak, ve nihayet bazı yeniden faktoring yaptığını düşünmek için bir şans var oldum. Şu anda bu gibi bakmak fonksiyonları bir grup ile, prosedür yazmış:
get_section_A ($type='foo', $mode='bar', $read_only=false, $values=array()) {
if ($this->type == 'foo') {
if ($this->mode == 'bar') { }
else { }
} else { }
}
Bu parametreler etrafında geçen kötü olduğunu, bu yüzden böyle bir sınıf yazmaya başladım:
class MyForm {
public $type; // or maybe they'd be private or
public $mode; // I'd use getters and setters
public $read_only; // let's not get distracted by that :)
public $values;
// etc.
function __constructor ($type='foo', $mode='bar', $read_only=false, $values_array=array()) {
$this->type = $type;
// etc.
}
function get_sections () {
$result = $this->get_section_A();
$result .= $this->get_section_B();
$result .= $this->get_section_C();
}
function get_section_A() {
if ($this->type == 'foo') { }
else { }
}
function get_section_B() {}
function get_section_C() {}
// etc.
}
Sorun prosedürel fonksiyonları (bölümlerin gruplar için) birkaç dosyanın ayrılır, ve ben tek bir sınıf dosyası içine hepsini birleştirmek eğer, ben hantal hissediyor, 2500 hatlarında bakıyorum olmasıdır. Ben bir kaç çözüm düşündüm:
- pis parametreleri ile yaşayan tutmak ve benim zaman başka bir şey yapmak :)
- 2500 satırlık bir dosyayı sahip canlı
- nasılsa bu parametrelerin değerlerini "bilir" bölümlerinin her grup için ayrı bir sınıf oluşturmak
Ben 3. yaparsam, ben iki temel yaklaşımlar düşündüm:
- Tek bir parametre olarak MyForm nesnesini iletin
- MyForm set olsun statik özelliklere sahip FormSectionGroup sınıf oluşturmak, daha sonra grup dosyaları, her sınıf FormSectionGroup genişletmek ve otomatik olarak bu parametreler için geçerli değerler erişim olurdu.
1) set-up için muhtemelen daha kolay ve ben $this->type
veya $myForm->type
tüm bu farklı değil demek olmadığını içeride get_section_A()
değilim, ama bu kez tam olarak OOP değil. (Aslında, ben gerçekten bir OOP yaklaşım değiştirmeden bunu yapabilir.)
Diğer yaklaşımlar var mı? Ilgili düşünceler daha iyi?