pooria2c
یک شنبه 13 مرداد 1392, 16:07 عصر
Code Generation and T4 Text Template :
با اجازه از همه اساتید محترم، می خواستم یه بحث خیلی مهم رو توی برنامه نویسی بگم، که واسه راحتی کدنویسی در پروژه های آینده هر برنامه نویسی نیازه!!!!
اول از همه می خوام هدف از این تاپیک رو بگم،
شما EF رو در نظر بگیرید که برای تمامی جداول موجود در پایگاه داده کلاس هایی رو ایجاد می کنه POCO، تمامی فیلد های اون و تولید می کنه، حالا می خواییم کاری کنیم که خودمون تعیین کنیم چی رو تولید کنیم، اصلاً چه فایلی رو تولید کنیم، مثلاً می تونیم تعیین کنیم که علاوه بر فیلدهای عضو یک سری تابع هم برای ما تولید کنه!!!
پس به طور کلی هدف از این بخش، تولید کدهای خودکار می باشد، که با استفاده از امکانات ویژوال استادیو می تونیم این کار و انجام بدیم (مثلاً: به جای اینکه وقت خودمون و صرف نوشتن کدهای اضافی در لایه تجاری کنیم، با استفاده از یک Code Generator می آییم واسه تمامی کلاس های موجود تابع های تجاری خودمون و تعریف می کنیم.)
در ویژوال استادیو یک T4 Text Template ترکیبی از بلاک های متنی و کنترل های منطقی می باشد که می تونه یک فایل متنی رو تولید کنه. کنترل منطقی بخش هایی از کد برنامه ویژوال سی شارپ یا ویژوال بیسیک هستند، فایل خروجی می تواند به صورت متنی یا هر نوع فایل دیگری باشد، مثل یک فایل HTML، یک فایل منابع یا سورس منبع برنامه به هر زبانی باشد.
به طور کلی 2 نوع T4 Text Template وجود دارد:
1. Run time T4 text templates
با استفاده از این قالب می تونیم فقط متن های معمولی رو ایجاد کنیم، مثلاً :
<html><body>
The date and time now is: <#= DateTime.Now #>
</body></html>
توجه داشته باشید که خروجی هم مثل کد بالا می باشد، و شباهت خروجی با این کد به شما در ویرایش کد کمک خواهد کرد و هم طور می توان در این کد از قطعه کد های سی شارپ و یا ویژوال بیسیک استفاده کرد، مثلاً از حلقه برای تکرار قسمتی مثلاً سطر های جداول و یا شرط و دستورات دیگر استفاده کرد.
برای تولید فایل خروجی هم از دستور زیر استفاده می کنیم :
string context = new MyTextTemplate().TransformText();
نوشته های بالا تنها پیش درآمدی برای درک تولید کننده کد می باشد و اگر معنای حرف هایی که زده شد رو متوجه نشدید در ادامه توضیح خواهم داد.
خوب حالا مراحل اضافه کردن یک فایل Run Time t4 text templates به شرح زیر می باشد:
Add New Item > Runtime text template
حالا یه فایلی شبیه به فایل زیر می بینید:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
حالا شما تصور کنید که به انتهای این فایل یک سری دستوراتی رو اضافه کردیم، مثل زیر :
<#@ template language="C#" #>
<html><body><h1>Sales for Previous Month</h2><table>
<# for (int i = 1; i <= 10; i++) { #> <tr><td>Test name <#= i #> </td> <td>T
est value <#= i * i #> </td> </tr>
<# } #> </table>This report is Company Confidential.</body></html>
خوب حالا کافیه که توی برنامه ازش استفاده کنیم، (مثل یه برنامه کنسول سی شارپ).
Page page = new Page();
String pageContent = page.TransformText();
System.Console.WriteLine(pageContent);
با اجازه از همه اساتید محترم، می خواستم یه بحث خیلی مهم رو توی برنامه نویسی بگم، که واسه راحتی کدنویسی در پروژه های آینده هر برنامه نویسی نیازه!!!!
اول از همه می خوام هدف از این تاپیک رو بگم،
شما EF رو در نظر بگیرید که برای تمامی جداول موجود در پایگاه داده کلاس هایی رو ایجاد می کنه POCO، تمامی فیلد های اون و تولید می کنه، حالا می خواییم کاری کنیم که خودمون تعیین کنیم چی رو تولید کنیم، اصلاً چه فایلی رو تولید کنیم، مثلاً می تونیم تعیین کنیم که علاوه بر فیلدهای عضو یک سری تابع هم برای ما تولید کنه!!!
پس به طور کلی هدف از این بخش، تولید کدهای خودکار می باشد، که با استفاده از امکانات ویژوال استادیو می تونیم این کار و انجام بدیم (مثلاً: به جای اینکه وقت خودمون و صرف نوشتن کدهای اضافی در لایه تجاری کنیم، با استفاده از یک Code Generator می آییم واسه تمامی کلاس های موجود تابع های تجاری خودمون و تعریف می کنیم.)
در ویژوال استادیو یک T4 Text Template ترکیبی از بلاک های متنی و کنترل های منطقی می باشد که می تونه یک فایل متنی رو تولید کنه. کنترل منطقی بخش هایی از کد برنامه ویژوال سی شارپ یا ویژوال بیسیک هستند، فایل خروجی می تواند به صورت متنی یا هر نوع فایل دیگری باشد، مثل یک فایل HTML، یک فایل منابع یا سورس منبع برنامه به هر زبانی باشد.
به طور کلی 2 نوع T4 Text Template وجود دارد:
1. Run time T4 text templates
با استفاده از این قالب می تونیم فقط متن های معمولی رو ایجاد کنیم، مثلاً :
<html><body>
The date and time now is: <#= DateTime.Now #>
</body></html>
توجه داشته باشید که خروجی هم مثل کد بالا می باشد، و شباهت خروجی با این کد به شما در ویرایش کد کمک خواهد کرد و هم طور می توان در این کد از قطعه کد های سی شارپ و یا ویژوال بیسیک استفاده کرد، مثلاً از حلقه برای تکرار قسمتی مثلاً سطر های جداول و یا شرط و دستورات دیگر استفاده کرد.
برای تولید فایل خروجی هم از دستور زیر استفاده می کنیم :
string context = new MyTextTemplate().TransformText();
نوشته های بالا تنها پیش درآمدی برای درک تولید کننده کد می باشد و اگر معنای حرف هایی که زده شد رو متوجه نشدید در ادامه توضیح خواهم داد.
خوب حالا مراحل اضافه کردن یک فایل Run Time t4 text templates به شرح زیر می باشد:
Add New Item > Runtime text template
حالا یه فایلی شبیه به فایل زیر می بینید:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
حالا شما تصور کنید که به انتهای این فایل یک سری دستوراتی رو اضافه کردیم، مثل زیر :
<#@ template language="C#" #>
<html><body><h1>Sales for Previous Month</h2><table>
<# for (int i = 1; i <= 10; i++) { #> <tr><td>Test name <#= i #> </td> <td>T
est value <#= i * i #> </td> </tr>
<# } #> </table>This report is Company Confidential.</body></html>
خوب حالا کافیه که توی برنامه ازش استفاده کنیم، (مثل یه برنامه کنسول سی شارپ).
Page page = new Page();
String pageContent = page.TransformText();
System.Console.WriteLine(pageContent);