에서 이 문서 알렉스 Papadimoulis으로,이 조각을 볼 수있다 :
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");
}
}
나는이 기사를 정말로 이해하지 못한다.
나는 인용한다 :
모든 비즈니스 규칙 일정이 일부 구성 파일에 저장 한 경우, 생활이 많은 것 [이상 ( 원문 )] 어려운 소프트웨어 유지 보수 모두를위한 하나, 큰 파일을 공유 코드 파일이 많이있을 것를 (또는 그 반대, 아주 작은 구성 파일들); 비즈니스 규칙에 변경 사항을 배치하려면 새 코드가 필요하지 않지만 구성 파일을 수동으로 변경해야합니다. 디버깅이 훨씬 더 어렵습니다.
이는 구성 파일에 "500000"상수 정수 또는 "AUTHCNS-1A"및 기타 문자열 상수를 갖는 것에 대한 인수입니다.
이것이 어떻게 나쁜 습관이 될 수 있습니까?
이 스 니펫에서 "500000"은 숫자가 아닙니다. 예를 들어 다음과 동일하지 않습니다.
int doubleMe(int a) { return a * 2;}
여기서 2는 추상화 할 필요가없는 숫자입니다. 그 사용법은 분명하며 나중에 재사용 할 수있는 것은 아닙니다.
반대로 "500000"은 단순한 숫자가 아닙니다. 기능의 중단 점에 대한 아이디어를 나타내는 중요한 가치입니다. 이 번호는 여러 곳에서 사용할 수 있지만 사용중인 번호는 아닙니다. 그것은 어떤 규칙이 적용되는지, 어떤 규칙이 적용되는지에 대한 한계 / 경계선에 대한 아이디어입니다.
방법도 구성 파일에서 참조하거나하는 #define
, const
또는 언어는 그 값을 포함하여보다 악화 제공 무엇? 나중에 프로그램이나 다른 프로그래머가 그 경계선을 필요로하므로 소프트웨어가 다른 선택을 할 수 있습니다. 변경 될 때 두 파일에서 변경 될 것이라는 보장은 없습니다. 그것은 디버깅에 분명히 나쁘다.
또한 내일 정부에서 "5/3/2050부터 AUTHLDG-1A 대신 AUTHLDG-122B를 추가해야합니다"가 필요한 경우이 문자열 상수는 단순한 문자열 상수가 아닙니다. 아이디어를 나타내는 것입니다. 그것은 그 아이디어의 현재 가치 일뿐입니다 ( "원장이 500k 이상인 경우 추가하는 것").
명확히하겠습니다. 나는 그 기사가 잘못되었다고 말하는 것이 아니다. 나는 그것을 얻지 못한다. 어쩌면 (적어도 내 생각에는) 너무 잘 설명되어 있지 않을 수도 있습니다.
가능한 모든 문자열 리터럴 또는 숫자 값을 상수, 정의 또는 구성 변수로 바꾸는 것이 필요 할뿐만 아니라 지나치게 복잡하지만이 특정 예가이 범주에 속하지 않는 것으로 이해합니다. 나중에 필요하지 않다는 것을 어떻게 알 수 있습니까? 아니면 그 문제에 대해 다른 사람이 있습니까?