Giả sử tôi có phương pháp dài như thế này:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
Phương pháp này không có bất kỳ phần lặp đi lặp lại nào nên được chuyển sang phương thức riêng biệt hoặc chức năng cục bộ.
Có nhiều người (bao gồm cả tôi) nghĩ rằng các phương thức dài là mùi mã. Ngoài ra tôi không thích ý tưởng sử dụng #region
(các) ở đây và có một câu trả lời rất phổ biến giải thích tại sao điều này là xấu .
Nhưng nếu tôi tách mã này thành các phương thức
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Tôi thấy các vấn đề sau:
Phạm vi định nghĩa lớp gây ô nhiễm với các định nghĩa được sử dụng bên trong bởi một phương thức duy nhất và điều đó có nghĩa là tôi nên ghi lại ở đâu đó
Task1
vàTask2
chỉ dành cho nội bộ củaSomeLongMethod
(hoặc mọi người đọc mã của tôi sẽ phải suy ra ý tưởng này).Ô nhiễm IDE tự động hoàn thành (ví dụ Intellisense) các phương thức sẽ chỉ được sử dụng một lần trong
SomeLongMethod
phương thức duy nhất .
Vì vậy, nếu tôi tách mã phương thức này thành các hàm cục bộ
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
sau đó, điều này không có nhược điểm của các phương thức riêng biệt nhưng điều này trông không tốt hơn (ít nhất là đối với tôi) so với phương pháp ban đầu.
Phiên bản nào SomeLongMethod
dễ bảo trì và dễ đọc hơn cho bạn và tại sao?