Это хорошая практика для организации методов класса в специализированные подклассы? - PullRequest
0 голосов
/ 12 апреля 2019

Класс в конечном итоге выставляет все свои методы и поля на одном уровне и становится крайне неорганизованным.

Было бы лучше организовать это в специализированных подклассах. Ниже приведен пример грязного класса.

public class MyClass
{
  //[Properties]
  public String value1;
  public String value2;

  //[Methods used by outside world]
  public void job1()
  {
     job1_task1();
     job1_task2();

     utilInternal1();
     utilExternal1();
  }
  public void job2()
  {
     job2_task1();

     utilInternal1();
     utilExternal1();
  }

  //[Methods used locally and always specific to a job method]
  private static void job1_task1() ...
  private static void job1_task2() ...
  private static void job2_task1() ...

  //[Methods used locally and general to jobs methods]
  private static void utilInternal1() ...

  //[Methods that could be added to an external class util]
  public static void utilExternal1() ...
} 

До сих пор я организовал свой код в таких специализированных классах, как Props, Jobs, Tasks, Utils.Internal, Utils.Externals.

  • Класс экземпляра, такой как Работа и Реквизит. Выставляются через два поля экземпляра. Они будут напрямую использовать переменную экземпляра.

  • Статический класс можно использовать напрямую, например, Задачи и Утилиты. Они НЕ будут напрямую использовать переменную экземпляра.

public class MyClass
{
  public Prop Props = new Prop();
  public Job Jobs = new Job();

  //[Properties]
  private class Prop
  {
     public String value1;
     public String value2;
  }

  //[Methods used by outside world]
  public class Job
  {
      public void job1()
      {
         Tasks.Job1.task1();
         Tasks.Job1.task2();

         Utils.internal.util1();
         Utils.external.util1();
      }
      public void job2()
      {
         Tasks.Job2.task1();

         Utils.internal.util1();
         Utils.external.util1();
      }
  }

//[Tasks for Jobs]
  private static class Tasks
  {
      //[Tasks for job1]
      private static class ForJob1
      {
          private static void task1() ...
          private static void task2() ...
      }
      //[Tasks for job2]
      private static class ForJob2
      {
          private static void task1() ...
      }
  }

  private static class Utils
  {
      //[methods util used locally]
      private static class Internal
      {
          private static void util1() ...
      }
      //[methods util generic that could be added to an external class Util]
      private static class External
      {
          public static void util1() ...
      }
  }
} 

Я сделал статическим большинство подклассов, содержащих методы, которые не должны напрямую использовать переменную класса, вместо этого они будут запрашивать их в качестве параметров. Задачи бесполезны для внешнего класса и имеют смысл только в нашем классе.

private static Task
{
   private static ForJob1
   {
      private static String task1(String value)
      {
          String result = value + ".";

          return result;
      }
   }
}

Это что-то приемлемое?

Меня также беспокоит использование памяти?

...