Группировка методов логически

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

public class MainClass
{
    private void Process(string message)
    {
        // ...
    }

    public void MethodA1(string text)
    {
        string msg = "aaa" + text;
        Process(msg);
    }
    public void MethodA2(int no)
    {
        string msg = "aaaaa" + no;
        Process(msg);
    }

    public void MethodB(string text)
    {
        string msg = "bb" + text;
        Process(msg);
    }

    // lots of similar methods here
}

Прямо сейчас я называю их так:

MainClass myMainClass = new MainClass();
myMainClass.MethodA1("x");
myMainClass.MethodA2(5);
myMainClass.MethodB("y");

Я хочу иметь возможность называть их так:

myMainClass.A.Method1("x");
myMainClass.A.Method2(5);
myMainClass.B.Method("y");

Как мне этого добиться? Вероятно, есть простой способ, о котором я не знаю.

3 ответа

Решение

Вы ищете объектную композицию.

В информатике композиция объектов (не путать с композицией функций) - это способ объединения простых объектов или типов данных в более сложные.

Кстати, вы не должны думать, что такой рефакторинг логически группирует методы: вам просто нужно реализовать свой код с четким разделением задач:

В компьютерных науках разделение задач (SoC) - это принцип разработки для разделения компьютерной программы на отдельные разделы, так что каждый раздел посвящен отдельной проблеме.

Практический пример:

public class A
{
    // B is associated with A
    public B B { get; set; }
}

public class B
{
     public void DoStuff() 
     {
     }
}

A a = new A();
a.B = new B();
a.B.DoStuff();

Вы можете перемещать методы в отдельные классы. Классы могут быть новыми классами с зависимостью от MainClass с публичным / внутренним Process метод, вложенный в MainClass или унаследовано от MainClass, Пример с наследованием:

public class MainClass
{
   protected void Process(string message)
   {
    // ...
   }
}

public class A: MainClass
{
    // methods for A go here
}

public class B: MainClass
{
    // methods for B go here
}

Вы можете использовать вложенные классы:

public class MainClass
{
    // private method here

    public class A
    {
        // methods for A go here
    }

    public class B
    {
        // methods for B go here
    }
}

Если вы хотите, чтобы они были в разных файлах, вы можете использовать частичный класс для MainClass

// file 1
public partial class MainClass
{
    public class A { }
}

// file 2
public partial class MainClass
{
    public class B { }
}
Другие вопросы по тегам