Группировка методов логически
В основном у меня есть класс с закрытым методом и множество открытых методов, которые вызывают этот закрытый метод. Я хочу сгруппировать эти общедоступные методы логически (желательно для разделения файлов), чтобы они были упорядочены, проще в использовании и обслуживании.
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 { }
}