Problem:
Có 1 biến toàn cục là một mảng 2 chiều chứa các message cho hệ thống theo 3 ngôn ngữ
string messages[100][3] = {
"en1", "kr1", "jp1",
"en2", "kr2", "jp2",
...
"en100", "kr100", "jp100",
}
Trong các hàm, khi cần show thông báo thì dùng như sau:
lang = 1; // korean
cout << messages[2][lang]
Smell:
1. "cout << messages[2][lang]" không thể hiểu nổi, Thạnh không thể maintain vì không hiểu được mục đích của số 2 nghĩa là gì. (Tiêu chuẩn về khó hiểu)
2. Nó không biểu đạt được mong muốn của đoạn code là show một message về OutOfMemoryMessage.(Tiêu chuẩn biểu cảm)
Solution:
Đoạn code trên thường xuất hiện bởi tay C++ programer. Hoàn toàn có thể dùng OOP để refactoring lại chúng. Dưới đây là một cách refactoring đơn giản nhất:
class StringResource {
private static string messages[100][3] = {
"en1", "kr1", "jp1",
"en2", "kr2", "jp2",
...
"en100", "kr100", "jp100",
}
private int language
private StringResource(int language) {
this.language = language;
}
public static StringResource Get(string languge) {
if (language == "English")
return new StringResource(0);
if (language == "Korean")
return new StringResource(1);
if (language == "Japanese")
return new StringResource(2);
throw new NotSupportException();
}
public string GetOutOfMemory() {
return messages[2][language];
}
// ... tuong tu cho cac message khac
}
No comments:
Post a Comment