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

时间:2012-02-23 17:18:04

标签: php dry

这是我当前班级的骨架

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等可能会改变。

如果我在所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。 我应该如何设计我的代码以减少冗余。

5 个答案:

答案 0 :(得分:3)

  

如果我在我的所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。我应该如何设计我的代码以减少冗余。

这就是inheriance­Docs的用途:

您可以根据interface­Docs定义Templates类型:

Interface Templates
{
      public function CheckTemplateCategory();
      public function SubmitUserTemplates();
      Public function ShowUserUploadedTemplates();
      public function ShowUSerFOrwardedTemplates();
      public function ShowAllTemplates();
}

根据接口的实现,您可以创建类型为TemplatesBase的基本模板(我称之为Templates)。您可以在此处开始将实际代码编写到函数中:

class TemplatesBase implements Templates

或者with abstraction­Docs

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.');
      }
}

答案 1 :(得分:0)

与使用任何其他编程语言的方式相同。如果在整个程序中多次使用完全相同的代码块,则将其置于其自己的函数中。

答案 2 :(得分:0)

如果您将其用作主类。并使用其他类来扩展它。它将使用主类中的函数,除非它们本身已定义。

e.g。如果你把ShowallTempates()放到扩展你的例子的类中,它将使用那个而不是你的例子中的那个。如果你不定义它将使用你的例子中的那个。

如果必须定义这些字段,请使用抽象类。

答案 3 :(得分:0)

使用继承。

创建一个BaseTemplate类。在此基类中实现通用逻辑(即冗余方法)。所有其他模板都应该扩展BaseTemplate类。

答案 4 :(得分:0)

您要求的是继承和功能覆盖的原因。无需过度复杂化:

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