トップ回答者
モデリングツールの作成に関して

質問
-
Visual Basic2010 VB.netを用いて
モデリングツールを作ろうと思っています。
システムとしては
四角形と棒(アーク)をGUIで直感的に配置できるようにし、ツリー構造を楽に構築できるようにしたいです。
(動的にコントロールの追加を行う)
質問は保存に関してです。
作成した図を次回も開けるように保存したいのですが、どのようにすればいいのでしょうか??
私の考えた案では、棒や四角形の大きさやlocationを全部(propaty)
取得して、DBにデータをインサートして、次回からはそのDBのデータから図形を作成する
そんな感じの流れは考えたのですが、要素が多ければ難しくなるとおもうので
もっといい方あったら教えてください^^
- 編集済み mo12mo34 2011年9月15日 10:19
回答
-
WinForm での開発は厳しいでしょうからフレームワークは WPF 一択になるでしょう
このあたり、何らかの根拠をお持ちなのであれば、それも示しておくと質問者にとって判断するための材料になりますので、書いておきましょうよ。
もしくは、厳しいと推測しているのであれば、推測であることと、なぜそう思うかを明示してください。どちらのフレームワークであれ、今のレベルからでは難しいと思います。
しかしながら、一方を選択肢から事実上排除しながら根拠(理由)が示されていないのは、ちょっと不親切かなと思います。追記。
「MiniUML が WPF だから、それを参考にするなら WPF になるだろう」ということなんでしょうか。
書いた後に見に行った私でした。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 編集済み AzuleanMVP, Moderator 2011年9月16日 14:25
- 回答としてマーク mo12mo34 2011年9月17日 10:57
-
大きく分けて、データベースに保存する方法とXMLでシリアライズする方法を私は思いつきます。
- データベースに保存する方法は図が複雑で巨大になってもパフォーマンスが落ちにくい
- XMLシリアライズはNetFrameworkでその機能が用意されているのでコーディング量は少ないと思われる
私はEnterpriseArchitectというUMLツールを使っていますが、これは標準でMDBをリポジトリとして使っています。
データベースへの保存ではReflectionパターンを利用すると良いと思われます。Reflectionを使うといちいちプロパティ名を書かずにシリアライズできるので単純になり、拡張もしやすくなります。
私は以前に帳票設計ツールを作ったときに同じような問題に取り組みました。
手前味噌にはなりますが当方のURLが参考になるかも知れませんのでご紹介申し上げます。
http://systemartlaboratory.com/reflectionpattern.html
http://systemartlaboratory.com/architecturepattern.html
http://systemartlaboratory.com/- 回答としてマーク mo12mo34 2011年9月17日 10:57
すべての返信
-
Visual Basic2010 VB.netを用いてモデリングツールを作ろうと思っています。
システムとしては
四角形と棒(アーク)をGUIで直感的に配置できるようにし、ツリー構造を楽に構築できるようにしたいです。
(動的にコントロールの追加を行う)
質問は保存に関してです。
作成した図を次回も開けるように保存したいのですが、どのようにすればいいのでしょうか??
私の考えた案では、棒や四角形の大きさやlocationを全部(propaty)取得して、DBにデータをインサートして、次回からはそのDBのデータから図形を作成する
そんな感じの流れは考えたのですが、要素が多ければ難しくなるとおもうので
図形とデータの連携に関しては、以下の書籍を読まれることをお勧めします。どのクラスにどのように責任を持たせるのかよく練らないと、要素や機能が増えるに従いシステムが破綻します。
この本の最初の事例で、著者が実際に関わった CAD/CAM システムの設計問題があげられてますが、図形にどうデータを関連付け、システムの拡張性や保守性を維持するか、様々なヒントが提示されてます。本書のサンプルは Java ですが、考え方は VB.NET でも全く変わりません。機会があったら一度目を通しておくことをお勧めしておきます。個人的には AutoCAD の ObjectARX クラスライブラリも、図形とデータの連携に関してかなり参考にしてました。開発にパターンコミュニティのメンバーが関わってたのか、クラス階層にパターンを多く導入し、デビュー当時は大変画期的な構造だったように思えます。AutoCAD が多くの競合製品を押しのけて CAD アプリケーションのデファクトスタンダードに伸し上っていけたのも、核となるライブラリに大胆にパターンを導入した成果だと勝手に推測してます。しかし設計が1995年とかなり昔のものなので、今となってはアーキテクチャが古すぎますね(汗
#VB の話じゃないですね(汗
ひらぽん http://d.hatena.ne.jp/hilapon/- 編集済み ひらぽんModerator 2011年9月16日 3:12 記述内容を追加
-
回答ありがとうございます。
http://journal.mycom.co.jp/articles/2009/02/03/miniuml/index.html
に載ってるMiniUMLのようなソフトを作ろうと考えています。
-
に載ってるMiniUMLのようなソフトを作ろうと考えています。
正直、1から作るのは大変だと思います。せっかく参考にされたMiniUMLがあり、ソースコードも公開されているようですので、まずはそのソースを読んでみられるのが良いと思います。MiniUMLはWPFでC#を使って書かれているようですが、C#をVBに変換するサイトがありますので、それを利用すれば良いでしょう。ただし、100%うまく変換してくれる保障はありませんが・・・。
細かいところまで理解されなくても、大まかな動作の仕組みを理解されるだけでも大変勉強になると思います。
UMLは図形ですが、一つ一つはオブジェクトです。多くの図形アプリケーションもツールボックスにオブジェクトがあり、それを配置するようになっています。単純な線やドットとして管理するのではなく、オブジェクトとして管理した方が良いでしょう。(おそらく渋木さんもそのことを言われているのだと思います)ちなみに、私の個人的な感覚ですが、WPF+VBで構築される方がWindowsフォーム+VBで構築されるより楽にできるのではないかと思います。そういう意味でもMiniUMLのソースを読まれた方が良いように思います。WPFを新たに勉強する必要があるかもしれませんが、SilverlightにしてもWindows Phone 7にしても同じ系統ですし、将来性もあると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
渋木さんが仰っておられるのは、「モデリングツールのデザイナのクラス構造」 ということだと思います。
最初の質問に
> もっといい方あったら教えてください^^
とのことですが、MiniUML のようなソフトを作りたいなら、MiniUML はソースが公開されているのでご自分で解析して参考にするといいと思います。
WinForm での開発は厳しいでしょうからフレームワークは WPF 一択になるでしょうが、そうなると MVVM パターンの導入も必要になるでしょう。いずれにせよ開発はかなり敷居が高いものになると思いますので、「簡単な方法などない」 と覚悟して臨む必要があると思います。
ひらぽん http://d.hatena.ne.jp/hilapon/ -
WinForm での開発は厳しいでしょうからフレームワークは WPF 一択になるでしょう
このあたり、何らかの根拠をお持ちなのであれば、それも示しておくと質問者にとって判断するための材料になりますので、書いておきましょうよ。
もしくは、厳しいと推測しているのであれば、推測であることと、なぜそう思うかを明示してください。どちらのフレームワークであれ、今のレベルからでは難しいと思います。
しかしながら、一方を選択肢から事実上排除しながら根拠(理由)が示されていないのは、ちょっと不親切かなと思います。追記。
「MiniUML が WPF だから、それを参考にするなら WPF になるだろう」ということなんでしょうか。
書いた後に見に行った私でした。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 編集済み AzuleanMVP, Moderator 2011年9月16日 14:25
- 回答としてマーク mo12mo34 2011年9月17日 10:57
-
大きく分けて、データベースに保存する方法とXMLでシリアライズする方法を私は思いつきます。
- データベースに保存する方法は図が複雑で巨大になってもパフォーマンスが落ちにくい
- XMLシリアライズはNetFrameworkでその機能が用意されているのでコーディング量は少ないと思われる
私はEnterpriseArchitectというUMLツールを使っていますが、これは標準でMDBをリポジトリとして使っています。
データベースへの保存ではReflectionパターンを利用すると良いと思われます。Reflectionを使うといちいちプロパティ名を書かずにシリアライズできるので単純になり、拡張もしやすくなります。
私は以前に帳票設計ツールを作ったときに同じような問題に取り組みました。
手前味噌にはなりますが当方のURLが参考になるかも知れませんのでご紹介申し上げます。
http://systemartlaboratory.com/reflectionpattern.html
http://systemartlaboratory.com/architecturepattern.html
http://systemartlaboratory.com/- 回答としてマーク mo12mo34 2011年9月17日 10:57