2013-05-15 11 views
1

웹 응용 프로그램에는 이와 같은 URL 매개 변수를 구문 분석하는 메서드가 있습니다. 우리 회사 부서의응용 프로그램 매개 변수의 긴밀한 결합을 피하려고 시도합니다.

... 
layerName = HtmlPage.Document.QueryString["Layer"] . . . ; 
... 

하나는 나에게 알 수없는 원인으로 변경하기 어려운이 응용 프로그램에 대한 매개 변수가있는 URL 목록이 있습니다. URL을 다음과 같이 사용할 수 있습니다. .../default.aspx에? 서비스 = 웰스 & 층 = ActiveWells & 쿼리 = XYZ IN를 ('1234567890 ...')

최근 대는 다음과 유사한 변경되었습니다. "ActiveWells"레이어 이름이 "Surface Participation Wells"로 변경되었습니다. "BoreStick"레이어 이름이 "WellBores"로 변경되었습니다. 따라서 해당 부서의 사전 설정된 URL 매개 변수가 더 이상 작동하지 않습니다.

관리자가 "ActiveWells"의 인스턴스를 "Surface Participation Wells"와 같은 것으로 변경하는 코드를 추가하라고했습니다. 그런 다음 관리자는 URL 매개 변수가있는 부서가 모두 새로운 이름으로 변경했을 때 해당 코드를 제거 할 수 있다고 말했습니다.

정확히 "꽉 조이는 커플"이 무엇인지 모릅니다. 그러나 나는 그것이 나쁘다는 것을 안다. 그리고 이것은 그것의 예와 같게 들린다. 일시적으로 유지하고 나중에 코드를 제거하고 화석화하지 않을 수도 있기 때문에 코드를 추가하는 것은 좋지 않습니다.

는하지만 내 명령을 따라이 같은 코드를 추가 :

layerName = NameConverter.LayerNameChange(layerName); 

정적 LayerNameChange 방법에 switch 문이입니다.

이 앱을 담당하는 개발자는 다른 부서에서 사전 설정된 URL 매개 변수를 모두 변경하면 들어오고 제거해야합니다.

나는 콘솔 또는 Windows 기반 응용 프로그램이이 일을 할 수있는 더 좋은 방법이됩니다

Main(string[] args){...} 

에 대한 기대 된 매개 변수가 있다면 다음과 유사한 또 다른 시나리오에는이 것 생각?


편집 : 대신 내가 위에서 언급 한 어떤 경우에, 나는 다음이 의사 코드 같은 것을 무슨 짓을

. 호출 방법은 일종의 것

private void MethodToParseURL_Parameters(Func<string, string> nameReplace) 
{ 
    . . . 
    layerName = nameReplace(layerName); 
    . . . 
} 

,

MethodToParseURL_Parameters(new Func<string, string>(NameConverter.LayerNameChange)); 

왜 구문 분석 방법은 NameConverter 클래스의 존재에 대해 알아야 하는가?
그게 내가 스스로에게 물었던 것이다.
URL 매개 변수를 파싱하는 것은 그 책임이 아닙니다.

내가 이것을 과소 평가했는지 모르겠다. 나는이 수준의 개발에 대한 새로운 인식을 가지고 있습니다. 이 질문에 대한 답변은 이미 알고 있지만이 새로운 아이디어에 대한 추가 의견은 높이 평가할 수 있습니다.

+0

이 솔루션에 대한 과도한 엔지니어링 작업을 시작하고 있습니다. 지금까지 잘 해왔습니다. SQL 인젝션에 대해 더 염려 할 것입니다. SQL 인젝션은 URL 파싱 이상의 기능을 필요로하기 때문입니다. –

답변

1

이것은 커플 링 문제가 아닙니다. 매개 변수를 함수 (심지어 웹 서비스)에 전달하면 특히 문제가되지 않습니다.

너무 많은 것을하기 전에 처리해야 할 문제 중 하나는 바로 SQL 인젝션 보안 문제입니다. 목록의 마지막 매개 변수는 SQL 문의 일부입니다. 누군가 당신의 사이트를 손상시키는 SQL 문을 만들 때 어떻게됩니까? "SQL Injection"연구.

shname NameConverter를 추가하여 올바른 작업을 수행했습니다. 네가 생각했던 방식대로 이름을 번역하고, 이름을 재 매핑하기위한 지역화되고 고립 된 방법을 제공한다. 다른 부서가 영원히 나가길 원한다고 가정합시다. 코드는 영원히 계속됩니다. 그러나 맵을 사용하여보다 일반적인 맵 기능을 사용하는 것이 좋습니다. 그렇게하면 데이터와 컨트롤을보다 명확하게 구분할 수 있습니다.

동료가 앞으로 무엇을 할 수 있습니까? 글쎄, Bugzilla 나 Jira와 같은 시스템에 문제가 발생했기를 바랍니다. NameConverter 심과이를 변경하는 방법을 설명하는 정의되지 않은 다음 릴리스의 티켓을 제출하십시오. 좋은 표권 규율을 통해 사람들은 모든 뛰어난 티켓에 대해 잘 알고 필요할 때 그것을 기억할 수 있습니다.

+0

"지도 기능"및 "지도 사용"에 대해 자세히 알려주십시오. 그게 패턴인가요? 그게 내가 한 짓과 어떻게 다른가요? 감사합니다. – Beebok

+0

질문에 대한 수정 : 편집 – Beebok

+0

매핑이란 문자열을 다른 문자열에 매핑하는 데이터 구조를 의미합니다. Java에서는 일반적으로 데이터 유형으로 표시됩니다. Map ; 다른 언어도 비슷한 구조를 가지고 있습니다. 이는 매핑을 수행하기 위해 switch 문이나 if-cascade가 필요 없다는 것을 의미합니다. –