我应该如何避免多个类中的代码冗余


How should I avoid code redundancy with in multiple classes

这是我当前类的骨架

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
    }
}