Trong bài viết này của Alex Papadimoulis, bạn có thể thấy đoạn trích này:
private void attachSupplementalDocuments()
{
if (stateCode == "AZ" || stateCode == "TX") {
//SR008-04X/I are always required in these states
attachDocument("SR008-04X");
attachDocument("SR008-04XI");
}
if (ledgerAmnt >= 500000) {
//Ledger of 500K or more requires AUTHLDG-1A
attachDocument("AUTHLDG-1A");
}
if (coInsuredCount >= 5 && orgStatusCode != "CORP") {
//Non-CORP orgs with 5 or more co-ins require AUTHCNS-1A
attachDocument("AUTHCNS-1A");
}
}
Tôi thực sự không hiểu bài viết này.
Tôi trích dẫn:
Nếu mỗi hằng số quy tắc kinh doanh đã được lưu trữ trong một số tập tin cấu hình, cuộc sống sẽ được nhiều [chi tiết ( sic )] khó khăn đối với tất cả mọi người duy trì phần mềm: có muốn được rất nhiều các tập tin mã mà chia sẻ một, tập tin lớn (hoặc, điều ngược lại, toàn bộ rất nhiều tập tin cấu hình nhỏ); triển khai các thay đổi đối với các quy tắc nghiệp vụ không yêu cầu mã mới, nhưng thay đổi thủ công các tệp cấu hình; và gỡ lỗi là khó khăn hơn nhiều.
Đây là một đối số chống lại việc có số nguyên không đổi "500000" trong tệp cấu hình hoặc "AUTHCNS-1A" và các hằng chuỗi khác.
Làm thế nào điều này có thể là một thực hành xấu?
Trong đoạn trích này, "500000" không phải là một con số. Nó không, ví dụ, giống như:
int doubleMe(int a) { return a * 2;}
trong đó 2, là một số không cần phải trừu tượng hóa. Việc sử dụng nó là rõ ràng và nó không đại diện cho một cái gì đó có thể được sử dụng lại sau này.
Ngược lại, "500000" không chỉ đơn giản là một con số. Đó là một giá trị quan trọng, một giá trị đại diện cho ý tưởng về một điểm dừng trong chức năng. Số này có thể được sử dụng ở nhiều nơi, nhưng đó không phải là số bạn đang sử dụng; đó là ý tưởng về giới hạn / đường biên giới, bên dưới quy tắc này được áp dụng và trên quy tắc khác.
Làm thế nào đề cập đến nó từ một tệp cấu hình, hoặc thậm chí là #define
, const
hoặc bất cứ điều gì ngôn ngữ của bạn cung cấp, tệ hơn bao gồm cả giá trị của nó? Nếu sau này trong chương trình, hoặc một số lập trình viên khác, cũng yêu cầu đường biên đó, để phần mềm đưa ra lựa chọn khác, bạn sẽ bị lừa (vì khi nó thay đổi, không có gì đảm bảo cho bạn rằng nó sẽ thay đổi trong cả hai tệp). Điều đó rõ ràng tồi tệ hơn cho việc gỡ lỗi.
Ngoài ra, nếu ngày mai, chính phủ yêu cầu "Từ 5/3/2050, bạn cần thêm AUTHLDG-122B thay vì AUTHLDG-1A", hằng số chuỗi này không phải là hằng chuỗi đơn giản. Đó là một ý tưởng đại diện cho một ý tưởng; đó chỉ là giá trị hiện tại của ý tưởng đó (đó là "thứ bạn thêm nếu sổ cái trên 500k").
Hãy để tôi làm rõ. Tôi không nói rằng bài báo đó là sai; Tôi chỉ không nhận được nó; có lẽ nó không được giải thích quá rõ (ít nhất là theo suy nghĩ của tôi).
Tôi hiểu rằng việc thay thế mọi giá trị bằng chữ hoặc số có thể bằng một hằng số, định nghĩa hoặc biến cấu hình, không chỉ không cần thiết, mà còn quá phức tạp, nhưng ví dụ cụ thể này dường như không thuộc danh mục này. Làm thế nào để bạn biết rằng bạn sẽ không cần nó sau này? Hoặc người khác cho vấn đề đó?