რას გვაძლევს DSL Tools სისტემის გამოყენება.
ძალიან მარტივად რომ ავხსნა ჩვენ შევქმინთ რაღაც მოდელირების სისტემას, ეს სისტემა გარდაიქმნება .msi პაკეტად, და დაურიგდება სხვებს, ან კიდევ შეინახება სათანადო ადგილზე.
შემდგომში ჩვენ შეგვიძლია დავაყენოთ დავაინსტალიროდ ეს პაკეტი ჩვენს Visual Studio ში და მას გაუჩნდება ის ფუნქციონალური ელემენტები რაც იყო დაგმემილი.
რა ფუნქციონალურ ელემენტებზეა ლაპარაკი -
Add - > New Item - > ჩვენს მიერ შექმნილი მოდელირების დიაგრამა
.tt გაფართოვების ფაილები. ეს არის ტექსტური ტემფლეითები. ჩვენ შეგვიძლია გავაკეთოთ მათი კასთომიზაცია იმისათვის რომ დაგენერირდეს კლასები, სქლ სკრიპტი, txt ფაილი ან რავიცი ნებისმიერი ფაილი რომელიც ჩვენ გვქონდა ჩანაფიქრში.
როგორ მუშაობს DSL Tools-ის მიერ შექმნილი მოდელი -
მოდელი წარმოადგენს გრაფიკულ დიაგრამას რომელიც მუშაობს ჩვენს მიერ ჩადებული ლოგიკით (რა ელემენტები შეიძლება დაიდოს დიაგრამაზე, რა თვისებები შეიძლება მიენიჭოს ელემენტებს, როგორ შეიძლება დავაკავშიროთ ელემენტები ერთმანეთს და სხვა
გრაფიკული დიაგრამა სერიალაიზდება XML ფორმატში. ეს პროცესი ორმხრივია. თუ ჩვენ დავარედაქტირებთ XML ფაილს, და შემდეგ გავხსნით დიაგრამას - ის ასახავს XML-ში შეტანილ ცვლილებებს, და პირიქით. მოდელის შექმნისას ჩვენ შეგვიძლია გავნსაძღვროთ თუ როგორი ფორმატის უნდა იყოს საბოლაოდ მიღებული ფაილი. ეს იმართება მთელი რიგი თვისებებით მოდელის შექმნის სკრინზე. გარდა ამისა ეს პროცესი შეიძლება აიღოთ თქვენ ხელში თავიდან ბოლომდე, თვენი საკუთარი სერიალიზაციის კლასის დაწერის საშუალებით.
გარდა XML სტრუქტურის შიგთავსის მქონე ფაილის, გენერირდება ყველა დიაგრამაზე არსებული ელემენტების, მათ კავშირების შესაბამისი კლასები წინასწარ განსაზღვრული ფორმატით.
ამ დაგენერირებულ კლასებზე, კლასების კოლექციებზე და სხვა, ჩვენ გვაქვს წვდომა თემფლეითებიდან, ანუ tt (ან სხვა წინასწარ განსაზღვრული) გაფართოვების ფაილებიდან.
თემფლეითებს აქვთ სპეციალური ტაგი <# #> რომელშიც მოქცეული შეიძლება იყოს .NET ენის (C#, VB.NET) ენის კონსტრუქციები რომლებიც მართავენ კოდის გენერაციის დინებას, და იმას თუ რა გამოისახება საბოლაოდ დაგენერირებულ ფაილში.
ინსტრუმენტარი:
ვაყენებთ Visual Studio SDK 4.0 :
http://www.microsoft.com/downloads/details...&displaylang=enვაყენებთ Clarius Software Factory Toolkit-ს :
http://softwarefactoriestoolkit.net/Download_JUN07CTP.aspxუკანასკნელი აუცილებელი არაა მაგრამ იძლევა დამატებითი კომფორტს .tt გაფართოვების ფაილებთან მუშაობისას. ის აფერადებს სხვა და სხვა ტიპის კონსტრუქციებს და უფრო გარჩევადს ხდის კოდს თემფლეითებში. (შეგიძლიათ ნახოთ ეს ვიდეო
http://www.softwarefactoriestoolkit.net/T4...diingafile.html )
მოდით შევქმნათ უმარტივესი მოდელი. მოდელი იქნება მხოლოდ ცარიელი დიზაინერით წარმოდგენილი. ამ დიზაინერს ექნება რამოდენიმე თვისება. ჩვენ გვექნება წვდომა ამ თვისებებზე თემფლეით-ფაილებიდან. ასე რომ შევქმნათ ასევე ერთი თემპლეითი და დავაგენერიროთ რამე უმარტივესი ფაილი, კლასი მაგალიტად.
შევქმნათ ახალი პროექტი, გადავიდეთ განყოფილებაში Other Project Types -> Extensibility
და ავირჩიოთ პროექტის ტიპი : Domain-Specific Language Designer
დავარქვათ რამე სახელი მაგალითად EmptyClassModel
ამის შემდეგ გამოვა დიალოგური ფანჯარა სადაც შევძლებთ ავირჩიოთ დაწყებითი შაბლონი - ის მოდელი საიდანაც უნდა დავიწყოთ ჩველი ენის დაწერა.
აქ არის ოთხი ტიპის გამზადებული შაბლონი: Class Diagrams, Component Models, Minimal Language, და Task Flow.
ყველა ეს შაბლონი საინტერესოა იმით რომ არის ფაქტიურად პროქტის შაბლონი, მტელი თავისი კოდით, და შეგვიძლია დავათვალიეროთ და ვისწავლოთ/გამოვიკვლიოთ უკვე შექმნილი საინტერესო მოდელების კოდი და დიზაინერი.
ამჯამად ავირჩიოთ Minimal Language, რადგან ვაკეთებთ ძალიან პატარა მოდელს.
შემდეგ ავირჩიოთ თუ რა გაფართოვების იქნება საბოლაო დიზაინერი და იკონკა რომელის იქნება ასოცირებული ამ დიზაინერთან. ავირჩიოთ ecm (EmtyClassModel).
შემდეგ შეგვყავს Namespace-bi რომლებშიც დაგენერირდება საბოლაო დიზაინერის მოდელის კლასები. კარგი იქნება რომ დაიმახსოვროთ ეს Namespace - ი იმიტომ რომ საბოლაოდ ის უნდა გამოვიყენოთ ჩვენი კოდის გენერირების თემფლეითებში. ამ შემთხვევაში დავტოვოთ ის ამ სახით : Company.EmptyClassModel
ამის მერე ჩვენს წინ წარსდგება ახალი DSL-ის მოდელი. ის შედგება root ელემენტისგან (ExampleModel), რომელიც წარმოადგენს თვით საბოლაო დიზაინერის დიაგრამის ზედაპირს, რარტაც უბრალო ელემენტებისაგან (ExampleElement), და მათ შორის კავშირებისაგან(ExampleModelHasElements)
გადავარქვათ სახელები : ExampleModel - > EmptyClass და მოვშალოთ ყველაფერი ძედმეტი რაც არის დიზაინერზე (ყველაფერი გარდა EmptyClass და EmptyClassDiagram ელემენტებისა - რა თქმა უნდა თქვენ შეგიძლიათ დატოვოთ ისინი, ან კიდევ დაამატოთ მეტი - უბრალოდ მინდა მოვიყვანო რაც შეიძლება მარტივი მაგალითი), გარდა ამისა ვალიდაციის გასავლელად წასაშლელი იქნება ყველა ელემენტი Editor - > Toolbox Tabs განყოფილებაში DSL Explorer ფანჯარაში. საერთოდ ვფიქრობ რომ ვისაც დააინტერესებს ეს თემა, თვითონაც უკეთ გაარკვევს ესეთ ნიუანსებს როგორიცაა თვითონ მოდელის გენერირება, ამისათვის ძედმეტი იქნებოდა ჩემს მიერ წვრილმანების აღწერა, არსებობს წიგნები და ტუტორიალები ამის შესახებ, მე უბრალოდ მინდა დავწერო ის უმარტივესი და უსწრაფესი გზა პირველი კლასის გენერირებამდე რომელიც ახდენს დემონსტრაციას თუ როგორ ხდება ეს საერთოდ.
შემდეგ დავამატოთ ორი თვისება ამ მოდელის ელემენტს - მაგალითად ClassName და IdentifierFieldName, ორივე String ტიპის . ამ მომენტისათვის შეგვიძლია დავაგენერიროთ ჩვენი მოდელის მოდელი - ამისათვის გადავრთოთ ხედი Solution Exploreris ფანჯარაზე და დავაჭიროთ ახალ გაჩენილ იკონკას რომლის Tooltip-იც „Transform All Templates” გვიჩვენებს. დაველოდოთ მოდელის დაგენერირებას და გავუშვათ პროექტი შესრულებაზე.
ამის შედეგად გაიხსნება ახალი Visual Studio ს ინსტანსი და შიგნით იქნება გახსნილი მხოლოდ ერთი პროექტი სახელად “Debugging”. ამ მომენტისათვის ვისუალ სტუდიო იყენებს ეგრედწოდებულ Visual Studio Experimental Hive, რომელიც წარმოადგენს Visual Studio-ს ეხპერიმენტალურ ინსტანსს, რომელიც გაშვებულია რეესტრის სპეციალურ ექსპერიმენტალურ განშტოებაში. ეს ხდება იმისათვის რომ მოდელის ტესტირებისას თუ ის რამე მიზეზით ბაგიანია ან შეიძლება ავნოს თქვენი რეალური სამუშაო გარემო, მას არ ჰქონდეს ამის საშუალება. თქვენ შეგიძლიათ დაარესეტოთ ეს Hive-ი ნებისმიერ დროს SDK Tools-თან მოყოლილი უტილიტის საშუალებით. მომავალში როდესაც თქვენ დაასრულებთ მუშაობას მოდელზე, შექმნით საინსტალაციოს და უკვე დააყენებთ მას რეალურ Visual Studios ვერსიაზე.
ახალ გახსნილ პროექტში გახსენით ფაილი Sample.ecm, დააკლიკეთ დიზაინერს და Property ფანჯარაში დააყენეთ თვისებების “ClassName” და „IdentifierFieldName” მნიშვნელობები ესე „MyClassFreedomForGeorgia” და “FreedomIdentificationDemocracy”, დაასეივეთ დიზაინერი და დახურეთ.
გახსენით ფაილი EmptyClassModelReport.tt, გადავარქვათ ის GeneratedClasses.tt და შეცვალეთ შიგთავსი შემდეგით :