Bir üst nesne olan bir çocuk sınıf oluşturmak için kötü bir uygulama mı?

1 Cevap php

Ben iki farklı kaynaklardan sonuçlar almak ve bunları birbirine birleştirmek için kullanıyorum bir arama sınıf var. Arama sınıf ana ve ara uzatmak iki çocuk A ve B vardır.

Ara sınıf olarak, ben onların sonuçlarını almak için iki alt nesneleri başlatır (getirme) adında bir yöntemi var. Bunun gibi bir şey görünüyor:

public function fetch(){
  $a = new A($this);
  $a_results = $a->fetch();

  $b = new B($this);
  $b_results = $b->fetch();

  // code to combine the results here
}

A sınıfı ve B yapıcısı gibi görünür hem de:

class A extends Search
{
    public function __construct(Search $search){
      parent::__construct($search->category, $search->offset, $search->keywords...);
    }

Elimden bir çocuğa bir üst nesnenin geçen ve daha sonra aynı veri ile başka bir ana nesnesi oluştururken kulüpler yanlış bir şey yapıyorum gibi hissediyor. Bu kurmak için daha iyi bir yolu var mı?

Benim uygulamada bazı parçaları oldukça üst arama sınıfı aracılığıyla yerine, doğrudan sınıf A ve B erişmek gerekir, çünkü bu şekilde belirledik.

1 Cevap

Bileşimi kullanın, örneğin, her kaynak bir kaynak için ortak ne tanımlayabilir ve her A ve B kaynakları için parametreleri geçirmek Kaynağı sınıfının bir örneği olan kaynaklardan bir dizi var Arama dersim var.

Kaynak sınıfı kaynaklardan veri döndürmek ve ara sınıf arama yapalım için burada fikir, net değil durumda olduğunu. Bu pratik ve verimli gerçek kaynak ve arama yolu bağlıdır nasıl

class Search {
    private $sources = array();

    public Search($p1,$p2,$p3,$p4) {
        //Use proper parameters to define the sources
        $sources[] = new Source("A",$p1,$p2,$p3,$p4);
        $sources[] = new Source("B",$p1,$p2,$p3,$p4);
    }
    public function fetch() {
        foreach ($source in $sources) {
             $results[] = $source->fetch();
        }
        combine($results);
    }
}


class Source {
    //Whatever you need to define the source
    public function fetch() {
        //Fetch from the proper source
    }
    public Source($name,$p1,$p2,$p3,$p4) {
         //Store the parameters to be able to operate
    }
}