这是我当前类的骨架
class JokeTemplates
{
public function CheckTemplateCategory()
{
}
public function SubmitUserTemplates()
{
}
Public function ShowUserUploadedTemplates()
{
}
public function ShowUSerFOrwardedTemplates()
{
}
public function ShowAllTemplates()
{
}
}
在未来,我可能不得不设计许多这样的类,如LoveTemplates、FriendshipTemplates、BirthdayTemplates。。等其中SubmitUserTemplates、ShowUserUploadedTemplates、ShowUSerFOrwardedTemplates等一些函数可能保持不变,而ShowAllTemplates、CheckTemplateCategory等一些函数的功能可能会发生变化。
如果我在所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。我应该如何设计我的代码来减少冗余。
如果我在所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。我应该如何设计我的代码来减少冗余。
这就是天生的文档用于:
您可以根据它的接口定义Templates
类型文档:
Interface Templates
{
public function CheckTemplateCategory();
public function SubmitUserTemplates();
Public function ShowUserUploadedTemplates();
public function ShowUSerFOrwardedTemplates();
public function ShowAllTemplates();
}
您为接口的每个实现创建一个类型为Templates
的基本模板(我称之为TemplatesBase
)。您可以在这里开始将实际代码写入函数:
class TemplatesBase implements Templates
或者可替换地使用抽象文档:
abstract class TemplatesBase implements Templates
{
public function CheckTemplateCategory()
{
...
}
public function SubmitUserTemplates()
{
}
Public function ShowUserUploadedTemplates()
{
}
public function ShowUSerFOrwardedTemplates()
{
}
public function ShowAllTemplates()
{
}
}
最后,您可以从该类进行扩展,只添加您需要的函数:
class JokesTemplates extends TemplatesBase
{
public function ShowUSerFOrwardedTemplates()
{
throw new TemplatesException('Jokes Templates don't support USerFOrwardedTemplates.');
}
}
与任何其他编程语言相同。如果在一个程序中多次使用完全相同的代码块,请将其放入自己的函数中。
如果您将其用作主类。并使用其他类对其进行扩展。它将使用主类中的函数,除非它们是自己定义的。
例如,如果您将ShowallTempates()放入扩展示例的类中,它将使用该类,而不是示例中的那个。如果你不定义它,就用你的例子中的那个。
如果必须定义这些字段,请使用抽象类。
使用继承。
创建BaseTemplate类。在这个基类中实现公共逻辑(即冗余方法)。所有其他模板都应该扩展BaseTemplate类。
您所要求的正是继承和函数重写的原因。无需过度复杂化:
class TemplatesBase
{
public function checkTemplateCategory()
{
return "Base";
}
public function submitUserTemplates()
{
// ...
}
public function showUserUploadedTemplates()
{
// ...
}
public function showUserForwardedTemplates()
{
// ...
}
public function showAllTemplates()
{
// show all templates
}
}
class JokeTemplates extends TemplatesBase
{
public function checkTemplateCategory()
{
return "Jokes";
}
public function showAllTemplates()
{
// show all joke templates
}
}
class LoveTemplates extends TemplatesBase
{
public function checkTemplateCategory()
{
return "Love";
}
public function showAllTemplates()
{
// show all love templates
}
}