저는 수년간 웹 개발을 해왔습니다. 나는 회사마다 서로 다른 이해를 가지고 있습니다. 나는 최근에 블로그 프로젝트를 진행했습니다. 웹 개발에서 템플릿 클래스의 역할을 깨달았습니다. 나는 밤에 집에 있습니다. 나는 항상 asp.ne 개발을 위해 특별히 설계된 템플릿 클래스를 만들 수 있다고 생각했습니다. 그래서 저는 이 템플릿 클래스를 작성했습니다.
다운로드 주소는 여기를 클릭하세요
다운로드한 500sea.txt 파일의 이름을 Templet.rar로 바꾸고 열면 됩니다.
열려 있으면
http://img.club.163.com/images/user/other/500sea
500sea.txt 파일을 다운로드하라는 메시지가 표시되지 않습니다. 그런 다음 Internet Express 및 기타 도구를 사용하여 이 주소를 다운로드하고 다운로드한 500sea.txt 파일을 *.rar 파일로 변경합니다.
아래는 내부 설명 파일입니다.
//------------------------------------------------ ------------------------------------- -------------//
소개하다:
이 템플릿 클래스는 3계층 아키텍처 웹 사이트 개발을 위해 작성되었습니다. StringTemletReplet.dll 구성 요소
템플릿 클래스를 포함합니다. StringTemletReplet 네임스페이스의 템플릿 클래스는 UI 레이어 또는
로직 레이어에서 사용됩니다.
************************************************** * ***************************
실행 방법:
압축이 풀린 Templet 폴더를 참조하려면 Templet라는 가상 디렉터리를 만듭니다.
내부 RetuenString.aspx, ReturnText.aspx, WriteArticon.aspx를 실행합니다.
LongLoop.aspx 페이지. 페이지에 해당하는 cs 파일에 해당 지침이 있습니다.
페이지를 처음 열 때 대리자 개체와 템플릿 파일을 캐시에 저장해야 하므로 실제 속도는 첫 번째 페이지에 따라 달라집니다.
나중에 한 번.
************************************************** * ***************************
원리 소개:
라벨 교체용 템플릿입니다. 레이블 위치를 찾기 위해 C#에서 포인터 연산을 사용했습니다.
대리자 개체를 사용하여 이미지 태그에 해당하는 구문 분석 기능을 가리키고 정적 개체를 사용하여 모든 대리자 개체를 캐시합니다.
템플릿 본문을 변경하지 않고 전체 템플릿 콘텐츠를 캐시합니다. 템플릿은 동적으로 변경될 수 있습니다.
************************************************** * ***************************
태그 소개:
특수 기호 쌍 {$ 및 $} 사이의 내용은 레이블입니다.
좋다
{$태그 이름:매개변수 1:매개변수 2:매개변수 3::문자 10$}
{$tagname:parameter1:parameter2::byte10$}
{$dt[5][이름]$}
라벨은 라벨 내부의 :: 기호를 통해 두 부분(레이블 매개변수 부분)과 (명령 제어 부분)로 구분됩니다.
{$tagname:parameter1:parameter2:parameter3::byte10$}
(태그 매개변수 부분) :: (명령어 제어 부분)
이 두 부분에서 레이블 매개변수 부분과 명령 제어 부분을 : 기호로 구분합니다.
태그 매개변수 부분---첫 번째는 태그 구문 분석 기능의 해당 이름인 태그 이름이고, 다음은 함수의 매개변수입니다.
태그 파싱 기능은 모든 매개변수 유형을 문자열 유형으로 허용하며, 매개변수 개수는 0~20개입니다.
함수, 반환 유형은 문자열 유형입니다. 매개변수는 라벨에 하드 코딩되거나 동적으로 기록될 수 있습니다.
명령 제어 부분---이제 단 두 개의 명령 기호 문자와 바이트만 있고 그 뒤에 차단 표준을 나타내는 숫자 매개변수가 있습니다.
서명 구문 분석 결과의 길이(예: 10자, 10바이트)입니다.
앞으로는 다른 명령 및 제어 기호를 확장하겠습니다.
레이블과 기능 간의 대응에 대해서는 Business.cs 파일의 지침을 참조하세요.
태그의 구체적인 사용 규칙은 template/templet/aa1.htm의 지침을 참조하세요.
특정 호출 규칙에 대해서는 프로젝트의 세 aspx 페이지를 참조하세요.
WriteArticon.aspx - 템플릿을 읽고 작성된 파일을 구문 분석하여 정적 페이지를 생성하는 뉴스 시스템
ReturnText.aspx - 모양을 자주 변경해야 하는 페이지를 작성하는 데 사용되는 템플릿 구문 분석 및 반환 문자열을 읽습니다.
스킨이 적용된 페이지. 템플릿은 동적으로 변경될 수 있습니다.
RetuenString.aspx - 태그 문자열을 허용하고 구문 분석 결과를 반환합니다. 일반적으로 ajax와 함께 사용됩니다.
************************************************** * ******************************
라벨 동적 값:
태그 구문 분석 기능은 태그에 전달된 고정 매개변수를 허용할 수 있습니다. 동적 매개변수를 허용하는 세 가지 방법이 있습니다.
Datatable 및 Hashtable 객체를 템플릿 클래스에 전달한 후
(Datatable은 데이터 레이어에서 얻어지며 Hashtable은 일반적으로 페이지 변수 및 기타 변수입니다)
1. dt[5][name] ---- Datatable에서 5개 행의 name 열에 있는 값을 가져오는 것을 의미합니다. 첫 번째 값은 숫자입니다.
두 번째는 열 이름입니다.
2. dt[name] ---- 루프 외부에서는 Datatable의 0행 이름 열에 있는 값을 가져오는 것을 의미합니다.
하나의 매개변수는 열 이름을 나타냅니다.
---- 루프에서는 Datatable의 name 열에 있는 값을 가져오는 것을 의미합니다.
이 라인은 루프 태그의 매개변수에 의해 결정됩니다.
3. page[PageId] ----- Hashtable 객체의 PageId 키에 대한 값을 가져와 문자열 유형을 반환하는 것을 나타냅니다.
예를 들어, {$two 매개변수 북마크:dt[3][word]:page[UserId]::character 10$}
{$dt[5][name]$} {$dt[name]$} {$page[ 페이지 ID ]$}
또는
{$dt[5][이름]::캐릭터 10$} {$dt[name]::캐릭터 10$} {$page[PageId]::캐릭터 10$}
이러한 태그는 개체의 값이 페이지에 직접 표시된다는 것을 나타냅니다.
************************************************** * ***************************
페이지 또는 클래스 내에서 템플릿 클래스 메서드를 호출합니다.
페이지나 클래스 내에서 호출 가능
객체를 생성하고 해당 태그 함수 구문 분석 클래스를 연결합니다.
//여기서는 이 줄 다음에 Business 클래스 객체를 추가하기만 하면 됩니다. new Business()
//다형성을 구현하기 위해 인터페이스를 사용하면 코드가 약간 번거로워 보입니다. 직접 사용하는 경우 마지막 "new Business()"를 태그 구문 분석 기능이 포함된 고유한 클래스로 수정하면 됩니다.
ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business())
//템플릿 경로 속성 읽기
objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm")
//파일 경로 속성 쓰기
objILabel.WritFilePath=this.Server.MapPath("page/aa1.html")
//데이터 테이블 개체 가져오기
objILabel.LabelDatatable=ds.Tables[0];
//Hashtable 객체를 사용하여 이 페이지의 변수를 템플릿 클래스에 전달합니다.
objILabel.LabelHashtable=ht;
그러면 세 가지 교체가 가능합니다.
//템플릿 교체 및 작성 시작
objILabel.LaberReplet();
//파싱 결과를 반환
문자열 aa=objILabel.LaberRepletText();
//파싱 결과를 반환합니다. 이는 템플릿 문자열을 직접 허용합니다. 자세한 내용은 RetuenString.cs 파일을 참조하세요.
string aa=objILabel.LaberRepletString();
자세한 내용은 이 세 파일의 cs 파일을 참조하세요.
WriteArticon.aspx - 템플릿을 읽고 작성된 파일을 구문 분석하여 정적 페이지를 생성하는 뉴스 시스템
ReturnText.aspx - 템플릿 구문 분석을 읽어 문자열을 반환하고 이를 사용하여 모양이 자주 바뀌는 페이지를 작성합니다.
피부 변화 페이지
RetuenString.aspx - 태그 문자열을 허용하고 구문 분석된 결과를 반환합니다. 일반적으로 Ajax와 함께 사용됨
********************************************** *** *******************************
라벨 기능 연관:
자세한 내용은 Business.cs 파일을 참조하세요.
논리 레이어에 해당하는 클래스의 정적 생성자에 다음 코드를 추가합니다.
//정적 생성자를 호출하고 태그 실행 함수 대리자를 정적 해시 테이블에 배치합니다.
//이 메서드를 실행해야 합니다.
정적 비즈니스()
{
Business _this=new Business();
FunctionList.objFunctionHashtable.Add("매개변수 북마크 없음",new KeyItemDelegate(new UserDelegate.Run_0(_this.show),0))
FunctionList.objFunctionHashtable.Add("매개변수 북마크 1개",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
FunctionList.objFunctionHashtable.Add("두 개의 매개변수 북마크",new KeyItemDelegate(new UserDelegate.Run_2(_this.tag_two),2));
//북마크는 실행 기능과 연관되어 있습니다. 북마크 구문 분석 클래스의 정적 생성자에 넣으십시오. 매번 실행하지 않고 메모리에 있는 개체를 완전히 사용하는 것입니다.
// "매개변수 북마크" 문자는 공개 문자열 태그(string aa) 함수에 해당합니다. 해당 모드는 해시 테이블에 키와 값을 추가하는 것입니다.
// ("매개변수 북마크",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
// 태그 이름 |
// 하나의 매개변수에 대해 Run_1 대리자를 사용합니다. |
// 해당 태그 실행 함수 |
// 하나의 매개변수에 대해 숫자 1을 씁니다.
// 위의 해당 예는 0개 이상입니다.
}
자세한 내용은 Business.cs 파일을 참조하세요
***************************************** * ***********************************
태그 내 루프 소개:
중첩되지 않은 루프는 태그 내의 일부 특수 기호를 사용하여 구현할 수 있습니다.
//------------------------------------------------ -------------
{$loop(3,0,alter)$} //0행부터 세 줄을 표시합니다. 교대 열이 있으면 교대 열을 실행합니다.
{$BlockItem$} //기본 루프 라인,
<td bgcolor="#33ccff">제목:{$dt[5][name]$}, 작성자:{$One 매개변수:dt[dddf]$}</td>
{$/블록항목$}
{$BlockAlterItem$} // 교대로 행을 반복합니다. 기본 행 레이블 쌍이 없으면 대체 루프 레이블 쌍이 있습니다. 교대 레이블 쌍을 기본 행 레이블 쌍으로 처리
<td bgcolor="#ff6699">제목:{$dt[5][name]$}, 작성자:{$one 매개변수:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} //루프할 행 수가 데이터 테이블의 행 수보다 큰 경우 여기에 있는 내용을 사용하여 표시를 보완합니다. "보조" 태그 쌍이 없는 경우. 그러면 표시되는 행 수가 Datatable의 행 수보다 많으면 Datatable의 행 수만 표시됩니다.
<td bgcolor="#33ccff">보충(태그는 내부에서도 사용 가능)</td>
{$/블록패치$}
{$BlockAlterPatch$} //보조 라벨 쌍은 없지만 대체 보충 라벨 쌍이 있습니다. 교대하는 보조 태그 쌍을 보조 태그 쌍으로 처리
<td bgcolor="#ff6699">대체 보충 자료(태그는 내부에서도 사용 가능)</td>
{$/BlockAlterPatch$}
{$/loop$} //루프 끝
//------------------------------------------------ ---------------
{$BlockItem$} {$/BlockItem$}: 기본 반복 행 레이블 쌍
{$BlockAlterItem$} {$/BlockAlterItem$} : 행 레이블 쌍을 교대로 순환합니다.
{$BlockPatch$} {$/BlockPatch$}: 기본 보충 라인 레이블 쌍
{$BlockAlterPatch$} {$/BlockAlterPatch$}: 행 레이블 쌍을 교대로 보완
//------------------ -- ----------
기본 루프 라인만 있는 경우에는 {$BlockItem$} 태그 쌍을 추가할 수 없습니다.
좋다
{$loop(3,0,alter)$}
<tr><td>{$함수 태그$}</td></tr>
{$/루프$}
그리고
{$loop(3,0,alter)$}
{$BlockItem$}<tr><td>{$함수 라벨$}</td></tr>{$/BlockItem$}
{$/루프$}
같은 효과를 의미합니다
//------------------------------------------------ -------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$함수 태그$}</td></tr>
{$/BlockAlterPatch$}
{$/루프$}
교대 순환 행 레이블 쌍만 있고 기본 순환 행 레이블 쌍이 없는 경우 교대 순환 행 레이블 쌍은 자동으로 다음으로 변환됩니다.
기본 루프 라인 레이블 쌍
//------------------------------------------------ ---------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$함수 태그$}</td></tr>
{$/BlockAlterPatch$}
{$/루프$}
대체 보조선 레이블 쌍만 있고 기본 보충선 레이블 쌍이 없는 경우 대체 보조선 레이블 쌍은 자동으로 다음으로 변환됩니다.
기본 루프 라인 레이블 쌍
************************************************** * **********************
루프 매개변수 설명:
{$loop(3,0,alter)$}
루프에는 세 가지 매개변수가 있으며 적절하게 줄일 수 있습니다.
첫 번째 매개변수:
3: 3번 반복합니다. 모두 반복한다는 의미는 아닙니다.
두 번째 매개변수:
2: 2부터 시작합니다. 0부터 시작한다는 의미는 아닙니다.
세 번째 매개변수:
alter: 대체하다
noalter: no alternation. 표시가 없으면 기본값은 alternation이므로 alter를 추가해도 동일합니다.
세 매개변수를 모두 생략하는 경우 최소한 한 쌍의 빈 괄호 {$loop()$}를 유지해야 합니다.
루프 Datatable의 행 수를 나타냅니다.
0행부터 보충사항이 있는 경우 보충내용이 표시됩니다.
************************************************** * *************************
업데이트가 있었습니다. 주로 최적화 루프입니다.
이제 50,000개의 행이 있는 테이블을 반복하는 데 300~400밀리초가 걸립니다.
************************************************** * *************************
템플릿 크기는 85k를 넘지 않는 것이 좋으며, 대형 객체가 되지 않도록 주의하시기 바랍니다. 2세대 개체의 페이지 템플릿 수는 919개 이하여야 하며 해당 기능 태그 수는 1597개를 초과하지 않는 것이 좋습니다.
내 자신의 이해와 함께 템플릿 클래스가 성장하는 것을 보는 것이 좋습니다.
************************************************** * ***************************