Является ли хорошей практикой организовывать методы класса в специализированные подклассы?

#java #subclass #reorganize

#java #подкласс #реорганизовать

Вопрос:

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

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

 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.Внутренние, утилиты.Внешние.

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

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

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

Является ли это чем-то приемлемым?

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

Комментарии:

1. Меня также беспокоит использование памяти? — почему?

2. Является ли это чем-то приемлемым? Делает код более трудным для чтения, я бы сказал «нет» на этом основании.

3.Я бы рекомендовал изучить принципы SOLID. scotch.io/bar-talk/… stackify.com/solid-design-principles

4. @ScaryWombat увеличивает ли это размер объекта в памяти, если у вас есть класс, содержащий несколько подклассов?

5. @DCTID спасибо за ссылку, я собираюсь ее прочитать. Вы видите что-то неправильное в этом. Я имею в виду, что организация фрагмента кода в методах уже помогает организовать класс, и это рекомендуется. Теперь организация методов в подклассе — это то, что хорошо, или это действительно имеет риски? возможно, проблемы с памятью? Другие ?. если это так, пожалуйста, подробно изложите свой ответ. Спасибо.