类设计模式 - 最佳实践

时间:2015-06-30 08:07:42

标签: php class design-patterns

男女!

我的问题是我不知道什么是最好的设计方法所以我定义了2个类1' st是:

class color
{
  private $id = NULL; 
  private $name = '';
  private $rgb = NULL; 
  private $cmy = NULL;
  private $wavelength = NULL; 
  private $frequency = NULL; 

public function __construct($name, $rgb, $cmy, $wavelenght, $frequency)
{
    setName($name);
    setRGB($rgb);
    setCMY($cmy);
    setWavelength($wavelength);
    setFrequency($frequency);
}

public function __destruct()
{

}

public function setName($name)
{
    $this->name=$name;
}

public function setRGB($rgb)
{
    $this->rgb=$rgb;
}

public function setCMY($cmy)
{
    $this->cmy=$cmy;
}

public function setWavelength($wavelength)
{
    $this->wavelength=$wavelength;
}

public function setFrequency($frequency)
{
    $this->frequency=$frequency;
}

public function getId()
{
    return $this->id;
}

public function getName()
{
    return $this->name;
}

public function getRGB()
{
    return $this->rgb;
}

public function getCMY()
{
    return $this->cmy;
}

public function getWavelength()
{
    return $this->wavelength;
}

public function getFrequency()
{
    return $this->frequency;
}

public function toJSON()
{
    return "{'id':'".$this->id."', 'name':'".$this->name."', 'rgb':'".$this->rgb."', 'cmy':'".$this->cmy."', 'wavelength':'".$this->wavelength."', 'frequency':'".$this->frequency."'}";
}

public function toCSV()
{
    return $this->id . ", " . $this->name . ", " . $this->rgb . ", " . $this->cmy . ", " . $this->wavelength . ", " . $this->frequency;
}

public function toHTML()
{
    return "<p>ID: " . $this->id . "</p><p>Name: " . $this->name . "</p><p>RGB: " . $this->rgb . "</p><p>CMY: " . $this->cmy . "</p><p>Wavelength: " . $this->wavelength . "</p><p>Frequency: " . $this->frequency . "</p>";
}

和2&#39; nd类看起来像

class CRUD_color
{
    public function create_color($parameters)
    {
       $color=new color();
       $color->setName($parameter['name']);
       $color->setRGB($parameter['rgb']);
       $color->setCMY($parameter['cmy']);
       $color->setWavelength($parameter['wavelength']);
       $color->setFrequency($parameter['frequency']);

       $entitymanager->persist($color);
       $entitymanager->flush();
    }
    public function request_color($parameters)
    {
       $color=$entitymanager->find($parameter['id']);
       echo $color->toJSON($parameter['name']);
    }
    public function update_color($parameters)
    {
       $color=$entitymanager->find($parameter['id']);
       $color->setName($parameter['name']);
       $color->setRGB($parameter['rgb']);
       $color->setCMY($parameter['cmy']);
       $color->setWavelength($parameter['wavelength']);
       $color->setFrequency($parameter['frequency']);

       $entitymanager->persist($color);
       $entitymanager->flush();
    }
    public function delete_color($parameters)
    {
       $color=$entitymanager->delete($parameter['id']);
    }
}

现在我的问题是,如果只有一种类颜色并且包含第一类中第二类的功能可能更好吗?还是让他们分开?

为什么一个比另一个好,反之亦然?设计模式对我来说很重要,所以为什么选择一个而不是另一个..

如果让我们说我们在函数create_color中有一个问题,我们就像新颜色那样实例化类本身()????

1 个答案:

答案 0 :(得分:0)

  

现在我的问题是,如果只有一种颜色可能更好   并包括第一节中第二类的功能?

没有。

  

还是让它们分开?

  

为什么一个比另一个好,反之亦然?

如果您决定使用不同类型的CRUD或其他使用颜色操作的对象(例如Builder),则需要将Color Color作为一个单独的类。如果您希望CRUD不仅可以操作Color对象,也可以这样做。最好尽可能地进行去耦。

  

设计模式对我来说很重要,所以为什么选择一个   其它..

有许多模式可以对您有所帮助:Builder,Repository,Decorator,Bridge,Factory ......这取决于您的需求什么是更好的实现。你必须熟悉所有这些并且从不实现它而不理解为什么它是这个特定任务的最佳选择。

  

如果我们说我们有函数create_color,那会有问题吗?   我们将类本身实例化为新颜色()????

是的,如果您需要添加一些创建步骤(例如以不同方式生成ID),您必须将此步骤添加到所有类,如Color,Font等。如果是单独的构建器类 - 您将此步骤添加到create()方法,它将以新的方式为所有抽象对象生成ID。

希望这能为您提供一种了解模式的方法。祝你好运!

顺便说一句,看看这本很棒的免费书:http://gameprogrammingpatterns.com/