我想使用越来越多的固体,但仍然学习,我正在改进一个PPT生成器,并希望您的帮助应用坚实的原则在其中。
这就是我想出来的,只是为了传递这个想法,这个示例是用PHP编写的,但是我会接受任何编程语言的答案:
class Controller
{
$ppt = new Ppt(Ppt::DEFAULT_RESOLUTION, $background, $header, $footer);
$ppt->writeSlides($photoCollection);
$pptFile = $ppt->saveToFile();
$ppt->deleteLocalTemporaryFiles();
readfile($pptFile);
unlink($pptFile);
}
class Ppt extends thirdPartyPptLib
{
const DEFAULT_RESOLUTION = 'x';
private $resolution;
private $background;
private $header;
private $footer;
public function __construct($resolution = null, $background = null, $header = null, $footer = null)
{
$this->resolution = $resolution;
$this->background = $background;
$this->header = $header;
$this->footer = $footer;
}
public function writeSlides(\Traversable $photoCollection)
{
$i = 0;
$count = count($photoCollection);
foreach ($photoCollection as $photoInfo) {
$photoToLeft = $i % 2 == 0;
$isLastPhoto = $i == ($count - 1);
if ($isLastPhoto) {
$slide = $this->newSlide();
$slide->addCenterPhotoInfo($photoInfo);
} else if ($photoToLeft) {
$slide = $this->newSlide();
$slide->addLeftPhotoInfo($photoInfo);
} else {
$slide->addRightPhotoInfo($photoInfo);
}
$i++;
}
}
private function newSlide()
{
$slide = parent->newSlide();
if ($this->hasBackground()) {
$slide->setBackground();
}
if ($this->hasHeader()) {
$slide->setHeader();
}
if ($this->hasFooter()) {
$slide->setFooter();
}
return $slide;
}
}
class Slide extends thirdPartyPptLibSlide
{
public function addLeftPhotoInfo($photoInfo)
{
$this->addLeftPhoto($photoInfo->getPhoto());
$this->addUnderlyingText($photoInfo->getText());
}
// functions addRightPhotoInfo and addCenterPhotoInfo very similar
}我应该把它划分成不同的类吗?还是方法?我应该创建接口吗?
发布于 2018-06-20 18:18:30
可以从构造函数中删除属性的重载。这样可以提高代码的维护性和可读性。
一个改进的例子:
class Style {
// Properties here
}
class Ppt {
public function __construct(Style $style) {
}
}现在,您只传递带有所有所需属性的样式对象。
https://codereview.stackexchange.com/questions/196910
复制相似问题