2009-09-24 2 views
2

즉시 코드를 생성해도 괜찮습니까? 아니면 주요 코드 냄새입니까? 어떻게 더 좋게 만들 수 있습니까?즉석에서 javascript를 생성하는 C# 코드

저는 웹에 익숙하지 않지만 항상이 문제에 걸려 넘어지고 있습니다. 왜 그런지 정말 이해하지 못합니다.

// Create a js function that applies foo to each group of controls 
foreach (KeyValuePair<string, Dictionary<Control, string>> pair in maps) 
{ 
    js.Append(pair.Key); 
    js.Append("=function(grid){Prm.remove_endRequest("); 
    js.Append(pair.Key); 
    js.Append(");if(grid && grid._element)"); // ... blah blah blah 

} 
page.ClientScript.RegisterClientScriptBlock(page.GetType(), key + "Ajax", 
    js.ToString(), true); 

답변

4

당신이 그것을 장소 전체에서하기 시작할 때까지 나는 냄새로 보지 않습니다.

  1. 쓰기 데이터 기반 JS 기능을하고, 동적으로 그들이 필요로하는 데이터를 생성 :

    미래에 도움 것이다, 그러나, 이러한 변경 사항을 고려하십시오. 이렇게하면 모든 JS를 빠른 정적 파일에 넣을 수 있으며 서버는 데이터 만 보냅니다. 이것은 (2)와 (3)보다 나은 디자인 변경이며 실제로 그렇게 어렵지는 않습니다. 현재 코드 생성기가 필요로하는 데이터를 생각해보고 JS 코드 대신 해당 데이터를 제공 한 다음 해당 데이터를 입력으로 허용하는 "팩토리 기능"으로 JS 코드를 래핑하십시오.

  2. HTML 용 템플릿을 사용하는 것과 마찬가지로 JS 코드 용 템플릿을 사용하십시오. 이 방법을 사용하면 일부 변수 이름을 변경하려는 경우 C# 흐름 제어/데이터 제어 코드에서 돌발 할 필요가 없습니다. 템플릿 파일에 도움이되는 뷰의 이름을 지정하는 것이 좋습니다. 당신이 Home.aspx이 있다면 아마 당신은 JS 코드 템플릿 Home_DoCrazyGridThing.js, Home_DoOtherCrazyThing.js있을 것이다. 간단한 템플릿 엔진을 작성하거나 기존 템플릿 엔진 중 하나를 사용할 수 있습니다.

  3. 유지 보수 담당자에게 무엇을하는지 분명히 알 수 있도록 코드 생성보다 얇은 계층을 생성하십시오. 즉 다양한 수준의 지능을 가진 JSCodeGenerator 클래스를 가지고 있습니다 (언어를 이해하면 OR 또는 문자열을 덤프 할 수 있으며 (2)의 emplate 엔진과 인터페이스 할 수 있음).