Sadece benim bakış açısı, ancak ilk etapta birden Kurucular olmamalıdır - Sizin yapıcı gerçekten özellikle bir temsili gibi hafif bir şey için iyi bir fikir değil, if / else-merdivenler, tam olacak renk.
Ben kuvvetle yerine böyle bir şey denemek teşvik:
class Color
{
protected function __construct($r, $g, $b)
{ ... }
public static function fromHex($hex) {
return new Color(...);
}
public static function fromRGB($r, $g, $b) { ... }
public static function fromArray(array $rgb) { ... }
...
}
Şimdi, tüketici kod yerine biraz gizemli ve belirsiz kurucusuna bu gibi aramaları:
$a = new Color(0,0,0);
$b = new Color('#000000');
Bunun yerine, bu gibi daha okunaklı ve anlamsal tüketici kodu olabilir:
$a = Color::fromRGB(0,0,0);
$b = Color::fromHex('#000000');
Bu muhtemelen tüketici kodu okuma birine, bu belirsiz yapıcı işi yapmak için gerekli mantığı ortadan kaldırır ve (böyle PhpStorm gibi bir IDE kullanarak eğer) bir bonus olarak tüm denetimler geçmek olabilir daha mantıklı. Eğer bir dokümantasyon jeneratör çalışan ediyorsanız, bu da bir sözlü açıklama kefeye ziyade, tüm seçenekleri tek tek belgelenmiş olmasını sağlar.
Bu kişisel bir tercihtir, ama birden çok statik fabrika yöntemleri var gidiyorum, ben yerine bazen görmekten daha tutarlı tüketici kodunda kullanılan, {görmeyi tercih - I protected
kurucu ilan unutmayın [(1)]} ve diğer zamanlarda new Color(...)
.