Misalkan saya punya metode panjang seperti ini:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
Metode ini tidak memiliki bagian berulang yang harus dipindahkan ke metode terpisah atau fungsi lokal.
Ada banyak orang (termasuk saya) yang berpikir bahwa metode panjang adalah bau kode. Juga saya tidak suka ide untuk menggunakan #region
di sini dan ada jawaban yang sangat populer menjelaskan mengapa ini buruk .
Tetapi jika saya memisahkan kode ini menjadi metode
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Saya melihat masalah berikut:
Mencemari lingkup definisi kelas dengan definisi yang digunakan secara internal oleh metode tunggal dan yang saya maksud harus mendokumentasikan suatu tempat yang
Task1
danTask2
dimaksudkan hanya untuk internalSomeLongMethod
(atau setiap orang yang membaca kode saya harus menyimpulkan ide ini).Mencemari IDE pelengkapan otomatis (misalnya Intellisense) dari metode yang hanya akan digunakan sekali di dalam
SomeLongMethod
metode tunggal .
Jadi jika saya memisahkan kode metode ini menjadi fungsi-fungsi lokal
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
maka ini tidak memiliki kelemahan dari metode yang terpisah tetapi ini tidak terlihat lebih baik (setidaknya bagi saya) daripada metode aslinya.
Versi mana SomeLongMethod
yang lebih mudah dikelola dan dibaca untuk Anda dan mengapa?