強力なコード生成ツールMyGeneration



Powerful Code Generation Tool Mygeneration



元の住所: 強力なコード生成ツールMyGeneration

私の世代 とてもパワフルです コード 生む ツール 。データベースの目次を介してさまざまなタイプ(C#、VB.Net、JScript、VBScript)のテンプレートを含むスクリプトを作成することにより、必要なさまざまなコードを生成します。これを使用して、ORMエンティティタイプ、ストアドプロシージャ、SQLステートメントなどを生成できます。私はそれを使ってAsp.Netページを生成します(ああ、私は怠け者です)。

私の世代 強力なオンラインテンプレートライブラリを提供します。彼らのWebサイトにアクセスするか、テンプレートブラウザのオンラインテンプレート機能ボタンを使用するために必要なテンプレートを見つけることができます。もちろん、必要に応じて独自のテンプレートを作成することもできます。



私のNHibernateテンプレートが公開され、それに専念するエッセイを書きました。見る ' MyGenerationとNHibernateマッピングファイルを使用して、テンプレートの関係を生成します(1対1、1対多、多対多) 」。

始めることができます ここに 最新バージョンをダウンロードします。

重要なコンポーネントを紹介する



これは、一般的に使用されるいくつかの重要な外部コンポーネントで構成されています。次の2つです。

データベースに含まれるMyMeta情報。データベースから目的のデータベースと関連情報を得ることができます。例:データベースの名前、データベーステーブル、主キーなど、内部のテーブル。

ゼウスは 私の世代 パッケージアセンブリWinFromの最も一般的なコンポーネントのセットであるフレームワークを提供します。これにより、インターフェイスが必要な動的コンポーネントを生成でき(ユーザーインターフェイステンプレートを使用パラメーター用に選択できます)、次にインターフェイス内部情報は、テンプレートの生成に役立つ場合があります。



それは分析を行います

私の世代 サポートは、さまざまなスクリプトモードでさまざまな言語でのみ表現され、その動作原理は同じです。

私が最も一般的に使用するのはC#テンプレートです。テンプレートは2つのステップで実行されます。最初にスクリプトエンジンとスクリプト内のインターフェイスコードコードテンプレートによって実行され、ソーステンプレートインターフェイスソースC#コードを生成してから、ソーステンプレートを実行して必要なコードを生成します。以下に示すように

テンプレートコードテンプレートプロファイル

Aspの文法とC#テンプレートコードの構文は非常に似ています(ソースはコードに基づいて生成されたコードを記述できないことに注意してください)。

フィールドまたはバインディングプロパティを表します。

セクションはスクリプトを表します。ここでは、C#構文に沿って任意のステートメントを記述できます。

他のコンテンツは解析されません。ファイナルに結果を直接出力します。

一般的なC#スクリプトは、テンプレートソース内のDotNetScriptTemplate、DotNetScriptTemplateを継承します。これは、彼が_DotNetScriptTemplateから継承されていることがわかります。インターフェースは似ています。

None.gif 公衆 概要 クラス DotNetScriptTemplate:_DotNetScriptTemplate
ExpandedBlockStart.gif
dot.gif {{
InBlock.gif
保護されたZeus.UserInterface.GuiController ui
InBlock.gif
保護されたMyMeta.dbRoot MyMeta
InBlock.gif
保護されたDnp.Utils.Utils DnpUtils
InBlock.gif
公衆DotNetScriptTemplate(IZeusContextコンテキスト):ベース(環境)
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
この。玉ねぎ=context.Objects ['玉ねぎ']なのでZeus.UserInterface.GuiController
InBlock.gif
この.MyMeta=context.Objects ['MyMeta']なのでMyMeta.dbRoot
InBlock.gif
この.DnpUtils=context.Objects ['DnpUtils']なのでDnp.Utils.Utils
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

テンプレート内のDotNetScriptTemplateは、データベース情報を使用する必要があり、インターフェイス情報も引用されています。MyMetaによってデータベース内の情報を取得し、内部のuiからテンプレートに関連する情報とパラメーターを取得できます。

Renderメソッドで、テンプレートにコードを記述します。のメソッドで記述されたセットアップページコード。

構成ファイルの使用

私の世代 デフォルト設定の編集にある構成ファイルの使用をサポートします...私たちが見ることができます。

言語マッピングは、データベースと言語(C#、VB.Netなど)フィールドの対応を定義します。

データベースターゲットマッピングデータベースであり、ADO.Net対応関係内のフィールドを定義します。

ユーザーメタデータを使用すると、ユーザーはカスタムプロファイルを設定できます。

テンプレートでは、同様の構文で入力['__dbDriver']の内容にアクセスできます。

一般的なものは次のとおりです。

__defaultOutputPath
__dbDriver
__dbTarget
__言語
__dbTargetMappingFileName
__dbLanguageMappingFileName
__userMetaDataFileName

Tutorials / C#Inside Charpt1内のサンプルテンプレートディレクトリを見ることができます(Charpt2も良い例ですが、やや面倒に書かれています)。

詳細なショートカットボタン

テンプレートブラウザはすべてのテンプレートを見ることができます。
84cb5930c434fd1292f080d6f3263866.jpe

最初の役割はボタンを更新することです。

2番目のボタンは、表示モードを切り替えるアクションです。名前空間に従って、カテゴリ別に参照および参照します。

3番目のボタンは、オンラインテンプレートライブラリを調べることです。

4番目のボタンはテンプレートの役割です。

6番目のポイント実行と組み合わせて使用​​される5番目のボタンと6番目のボタン、パラメーターは指定されたznipファイル(実際にはXML形式)に記録され、次のポイントは5番目のボタンを実行し、ファイルを保存したznipを選択すると自動的に行われます構成をロードします。

7番目のボタンはテンプレートの実行です。

66273462dee66e0ac79fcf1f2eb05b7d.jpe

最初のボタンアクションは、ファイルを開くことです。

2番目のアクションは、ボタンのテンプレートブラウザウィンドウです。

3番目のボタン機能はMyMetaブラウザウィンドウに表示され、データベース情報を表示します。

4番目のボタンは、新しいプロジェクトの役割です。複数のテンプレートを使用してタスクを完了することができます(私は通常そうします)。

5番目のボタンは、出力パスを開くためのデフォルトのアクションです。

6番目のボタンは、新しいJScriptテンプレートの役割です。

7番目のボタンは新しい役割のVBScriptテンプレートです

8番目のボタンアクションは新しいC#テンプレートです

9番目は新しい役割ボタンVB.Netテンプレートです

10番目のボタンはMyMetaプロパティを調べることです(使用方法がわからないので、次に使用するようにアドバイスしてください)

ボタンの10分の1は、言語マッピングを調べることです。

12番目のボタンは、DbTargetマッピングを調べることです。

13番目のボタンは、ユーザーメタデータを調べることです。

14番目のボタンは、グローバルユーザーメタデータを調べることです。

4a54fbc99d94c8d9a834af151389a252.jpe

最初のボタンは役割を維持することです

2番目の効果は[保存]ボタンです

3番目のボタンは、テンプレート情報を調べることです

4番目のボタンはコンソールの役割です

5番目のボタンの役割は、テンプレートを実行することです

最初のテンプレートを書いてみてください

メインメニューで、[ファイル]-> [新規]-> [C#テンプレート]を選択します。 私の世代 以下のテンプレートコードを生成します。これが内部のテンプレートコードです。

None.gif <%
None.gif
公衆 クラス GeneratedTemplate:DotNetScriptTemplate
ExpandedBlockStart.gif
dot.gif {{
ExpandedSubBlockStart.gif
公衆GeneratedTemplate(ZeusContextコンテキスト):ベース(環境) dot.gif{}
InBlock.gif
InBlock.gif
//-------------------------------------------------- -
InBlock.gif
//Render()は、ロジックを記述したい場所です
InBlock.gif
//-------------------------------------------------- -
InBlock.gif
公衆 オーバーライド ボイドRender()
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
%>
InBlock.gif切り替えることができます
アウトのようなスクリプトのこの
InBlock.gif
<%
InBlock.gifoutput.writeln(
'こんにちは世界。')。
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
%>

このテンプレートを実行すると、出力が表示されます。 %><% Content output directly to the inside of the results, output.writeln the content is outputted to the result. output is Interface which comes attributes. There are a lot of features. See Zeus's help files.

このようにスクリプトから切り替えることができます
こんにちは世界。

インターフェイスコードが見つかり、コードコメントが少し見つかりました。コメント後に次のコードを削除しました

None.gif 公衆 クラス GeneratedGui:DotNetScriptGui
ExpandedBlockStart.gif
dot.gif {{
ExpandedSubBlockStart.gif
公衆GeneratedGui(ZeusContextコンテキスト):ベース(環境) dot.gif{}
InBlock.gif
InBlock.gif
//-----------------------------------------
InBlock.gif
//ユーザーインターフェイスのエントリポイント
InBlock.gif
//-----------------------------------------
InBlock.gif
公衆 オーバーライド ボイドセットアップ()
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
//** UIを表示するには以下のコメント解除コード**
InBlock.gif
ui.Width= 100
InBlock.gifui.Height
= 100
InBlock.gifGuiLabel lblDemo
=ui.AddLabel('lblDemo''デモ''デモツールチップ')。
InBlock.gifui.ShowGui
= true
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

テンプレートを実行します。デモには、フォントタグと[OK]ボタンフォームが表示されます。コードに追加するラベルのデモフォント。 [OK]ボタンテンプレートが自動的に設定され、[OK]を示します。

簡単な関数を実装するためのテンプレートを書いてみましょう。ドロップダウンリスト名バインディングデータベースインターフェイスを使用して、データベース内のデータベーステーブルのリストを選択します。コードは以下のように表示されます

None.gif 公衆 クラス GeneratedGui:DotNetScriptGui
ExpandedBlockStart.gif
dot.gif {{
ExpandedSubBlockStart.gif ContractedSubBlock.gif
公衆GeneratedGui(ZeusContextコンテキスト):ベース(環境) dot.gif{}
InBlock.gif
InBlock.gif
//-----------------------------------------
InBlock.gif
//ユーザーインターフェイスのエントリポイント
InBlock.gif
//-----------------------------------------
InBlock.gif
公衆 オーバーライド ボイドセットアップ()
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
//** UIを表示するには以下のコメント解除コード**
InBlock.gif
ui.Width= 180
InBlock.gifui.Height
= 120
InBlock.gifui.Title
='最初のテンプレート'//フォームのタイトル
InBlock.gif
GuiLabel lblDatabase=ui.AddLabel('lblDatabase''データベースを選択''データベースを選択')。
InBlock.gifGuiComboBoxchooseDatabase
=ui.AddComboBox('ChooseDatabase''データベースを選択')。
InBlock.gifChooseDatabase.Width
=150
InBlock.gifsetupDatabaseDropdown(chooseDatabase)
InBlock.gif
InBlock.gifui.ShowGui
= true
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
//バインディングデータベース
InBlock.gif
公衆 ボイドsetupDatabaseDropdown(GuiComboBoxチェックボックス)
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
もし(MyMeta.IsConnected)//接続が成功した場合MyMeta
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gifチェックボックス.BindData(MyMeta.Databases)
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}
None.gif <%
None.gif
公衆 クラス GeneratedTemplate:DotNetScriptTemplate
ExpandedBlockStart.gif
dot.gif {{
ExpandedSubBlockStart.gif ContractedSubBlock.gif
公衆GeneratedTemplate(ZeusContextコンテキスト):ベース(環境) dot.gif{}
InBlock.gif
InBlock.gif
//-------------------------------------------------- -
InBlock.gif
//Render()は、ロジックを記述したい場所です
InBlock.gif
//-------------------------------------------------- -
InBlock.gif
公衆 オーバーライド ボイドRender()
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
ストリング_dbName=入力['ChooseDatabase'] .ToString()
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
foreach(ITableテーブルMyMeta.Databases [_dbName] .Tables)
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gifoutput.writeln(table.Alias)
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gifoutput.writeln(
'**************************')。
InBlock.gif
InBlock.gif
foreach(ITableテーブルMyMeta.Databases [_dbName] .Tables)
ExpandedSubBlockStart.gif
dot.gif{{
InBlock.gif
%><%=table.Alias%>
InBlock.gif
<%
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
%>

2つのforeachは同じように動作できます。ここで書くのは、2つのバインディング関数を示すことです。結果にスペースが表示されるため、2つの一番上の行のバインド動作を尋ねることができます。これにより、独自の効果を試すことができます。
他のコードは非常に単純です、私たちは皆理解していると思います。

それを実行し、結果を確認します

sysdiagrams
T_Child
T_Employee
T_Employee1
T_Parent
T_Person
T_Person1
T_Role
T_User
T_User_Role
**************************
sysdiagrams
T_Child
T_Employee
T_Employee1
T_Parent
T_Person
T_Person1
T_Role
T_User
T_User_Role

ああ、成功。

これは単純な例です。 MyGenerationの非常に強力なエンティティは、ORMクラス、ストアドプロシージャ、SQLステートメントなどを生成できます。
テンプレートを作成したい場合は、ZeusとMyMetaのヘルプファイルをもっと見ることができます。他の人がテンプレートを作成しているのを見てください。すぐに強力なテンプレートを作成できるようになると思います。


この記事を転載するアドレスを指定してください: 強力なコード生成ツールMyGeneration