C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: アプリケーション作成時に機能別にexeを分けていますか?


(過去ログ 10 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■1778 / inTopicNo.1)  アプリケーション作成時に機能別にexeを分けていますか?
  
□投稿者/ ばこま (3回)-(2007/03/06(Tue) 10:14:31)

分類:[Windows 全般] 

2007/03/06(Tue) 10:14:51 編集(投稿者)

こんにちは、ばこまです。連続投稿失礼します・・・

今C#にて画面が40個程度のWindowsアプリケーションを作成していますが、色々調べてみたら
exeを機能別に分けている方法が多いような気がします。
exeを機能別に分けるメリット、デメリットとは何でしょうか?

個人的には分けない方がデータの受け渡し、画面起動がスムーズに行えるような気がしますが…

それではよろしくお願いします。


引用返信 編集キー/
■1780 / inTopicNo.2)  Re[1]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ M.K (5回)-(2007/03/06(Tue) 10:37:46)
No1778 (ばこま さん) に返信

> exeを機能別に分けるメリット、デメリットとは何でしょうか?

機能別に全部exeにしてしまうとばこまさんの仰る様にデータの受け渡しや画面起動
の点でちょっと大変かも知れませんが、メニューなどから起動されるメイン画面のみ
exeとし、そこから呼ばれるサブ画面などはdllにする事でその辺りの問題は改善され
ると思います。

その上で個人的にパッと思いつくメリット・デメリットです。

メリット:

 多人数で並列して開発が出来る。
 機能毎にモジュールの処理が完結しているので再利用性が高い。
 加修を行った際に他のモジュールへの影響度合いが低い。
 1アセンブリのファイルサイズを小さくする事が出来る。

デメリット:

 作り方によっては起動時のオーバーヘッドが大きくなる。
 個々のアセンブリのバージョン管理が必要になる。
 ファイル数が多くなるので、プログラム名やソースなど管理が大変になる。
 参照設定が複雑になり過ぎてかえって加修時の影響度が大きくなる場合もある。

それぞれに一長一短があると思うので、開発規模や開発ルールに則ってどちらが
良いかを選択すればよいかと思います。
引用返信 編集キー/
■1783 / inTopicNo.3)  Re[2]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ 未記入 (42回)-(2007/03/06(Tue) 11:28:03)
No1780 (M.K さん) に返信
>  ファイル数が多くなるので、プログラム名やソースなど管理が大変になる。
>  参照設定が複雑になり過ぎてかえって加修時の影響度が大きくなる場合もある。

これはありえないかなぁ。
ファイル数が多くなるのと、ソースが複雑になるのとではわけが違うのでデメリットになるのかな。と。

バージョン管理については、どこにいってもデグレードさせる人がいるので、VSSで管理します。
というより、VSSで管理しておけばあまり問題にならないでしょう。

あとの意見は概ね賛成。
データの受け渡しに関しては、RDBMSなどで行えばいいでしょう。

小規模でもない限り分けた方が良いに1票。
引用返信 編集キー/
■1798 / inTopicNo.4)  Re[3]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ 中博俊 (977回)-(2007/03/06(Tue) 19:18:41)
中博俊 さんの Web サイト
EXEを画面単位にわけるってこと?
おいらは反対。
EXEは1つでやるべき。
DLLは好きにしてちょ。

よく認証、認可でメニューを切り替えますとか言って、メニューEXEにしか対策されていなくて、単独EXE起動すれば使えるとかお茶目なアプリがあったりします。

もちろんEXEが分かれているとプロセスが分離するので、データのやり取りが大変ってのがありますね。

EXEはあくまでエントリポイントとしての分割単位にとどめたほうがいいと思います。
引用返信 編集キー/
■1799 / inTopicNo.5)  Re[1]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Hirotow (61回)-(2007/03/06(Tue) 20:03:42)
Hirotow さんの Web サイト
どうでもいいことですが、EXEやDLLの数、すなわちプロジェクトの数がふえるほどビルドの所要時間は増加します。
またプロジェクトに改名の必要が生じたときが面倒です(そんなことしないのが一番ですが)。

駄文ですみません。
引用返信 編集キー/
■1800 / inTopicNo.6)  Re[2]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Ognac (1回)-(2007/03/06(Tue) 20:21:24)
目の前のプロジェクトで関連する不具合が発生してます.
100画面程度のアプリを 5つのサブシステムに別けて、各サブシステムを一つのプロジェクト(.DLL型)にしています。
EntryPointのMenu.exeから,各DLLを参照し画面遷移する仕組み。
画面遷移の方向にもよりますが、この場合は、プロジェクトは .exeプロジェクトであるべきでしょう。
案の定, Sub_AからSub_Bに移り,Sub_BからSub_Aに戻る必要がてぎた時に,相互参照でコンパイルエラーになってました。
至って初歩的な不具合なんですが、陥りがちです。
業務アプリでは, SUBシステム単位で .EXEであるべきというのが, 私の主張です。

引用返信 編集キー/
■1801 / inTopicNo.7)  Re[4]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ はつね (98回)-(2007/03/06(Tue) 21:12:58)
はつね さんの Web サイト
Windows全般という事ですが、私の場合は.NET以降かでちょっとだけ異なります。

基本は機能単位にアセンブリを作るという事です。

ただし、VB6までの場合はアセンブリ=EXEにしています。このとき注意していたのは単独で起動されたとしても問題ない範囲でEXEを分けることでした。
.NETでは、もう少し柔軟にしており、起動する部分はEXEでそれ以降はDLLになっていたりもします。

アセンブリが増えるとコンパイル時間などの問題もあるでしょうが、修正したファイルが含まれるプロジェクトだけコンパイルすればいいのですから、実際はアセンブリの数というよりも再コンパイルが必要な範囲に依存すると思います。きちんと設計すればするほど影響範囲が狭まりますから、コンパイル時間を気にしてアセンブリを分けるのを躊躇する必要はないと考えます。

引用返信 編集キー/
■1802 / inTopicNo.8)  Re[3]: アプリケーション作成時に機能別にexeを分けて
□投稿者/ ばこま (4回)-(2007/03/06(Tue) 21:51:27)
2007/03/07(Wed) 12:11:11 編集(投稿者)

みなさん貴重なご意見ありがとうございます。
結局は一長一短で規模別に型にはまらず柔軟に使い分けが良さそうですね。

大変勉強になりました、ありがとうございます。

解決済み
引用返信 編集キー/
■1813 / inTopicNo.9)  Re[3]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ 渋木宏明(ひどり) (148回)-(2007/03/07(Wed) 03:29:32)
渋木宏明(ひどり) さんの Web サイト
2007/03/07(Wed) 03:33:32 編集(投稿者)

No1800 (Ognac さん) に返信
> 画面遷移の方向にもよりますが、この場合は、プロジェクトは .exeプロジェクトであるべきでしょう。
> 案の定, Sub_AからSub_Bに移り,Sub_BからSub_Aに戻る必要がてぎた時に,相互参照でコンパイルエラーになってました。
> 至って初歩的な不具合なんですが、陥りがちです。

それ「だけ」が問題であるなら、比較的簡単な作りこみで回避できるんじゃないですかね?

既に出ている話ですが、プロセスを分割することによってデータ交換の手間が増大し、安易な作りこみによってデータ漏洩などのセキュリティ低下を招くリスクの方が個人的には心配です。

まぁこれも適当なフレームワークを作ってあげれば回避は可能ですが、穴の無いものに仕上げるには意外と苦労します。

引用返信 編集キー/
■1814 / inTopicNo.10)  Re[3]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Jitta (285回)-(2007/03/07(Wed) 07:27:10)
No1800 (Ognac さん) に返信
> 画面遷移の方向にもよりますが、この場合は、プロジェクトは .exeプロジェクトであるべきでしょう。
> 案の定, Sub_AからSub_Bに移り,Sub_BからSub_Aに戻る必要がてぎた時に,相互参照でコンパイルエラーになってました。
それは別の問題でしょう。
画面の主従関係が整理されていないため、と思います。
引用返信 編集キー/
■1822 / inTopicNo.11)  Re[4]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Ognac (2回)-(2007/03/07(Wed) 10:26:04)
No1814 (Jitta さん) に返信
>画面の主従関係が整理されていないため、と思います。
画面遷移を一方通行で構築する範囲では, DLLで構築するほうが,利便性が高いし,薦めるのでが、
相互に画面を呼び合ったり,ループ状に参照しあったりするケースで,整理できないまま,具合の悪い面を残したまま製造が上がって来るので,予防の意味もあり、そう言っています。(私のチェック怠慢もあります)

引用返信 編集キー/
■1823 / inTopicNo.12)  Re[5]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ 渋木宏明(ひどり) (149回)-(2007/03/07(Wed) 10:32:27)
渋木宏明(ひどり) さんの Web サイト
No1822 (Ognac さん) に返信
> 相互に画面を呼び合ったり,ループ状に参照しあったりするケースで,

Webだと比較的楽なんですけどね。
上でも書きましたが、画面遷移を管理するフレームワークを作って、それを使わせるのがいいんじゃないかな。

# 安易な実装を許して、問題が起きたところだけ個別対処するってのも生産的じゃないし。

引用返信 編集キー/
■1828 / inTopicNo.13)  Re[6]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Ognac (3回)-(2007/03/07(Wed) 11:10:30)
No1823 (渋木宏明(ひどり) さん) に返信
>上でも書きましたが、画面遷移を管理するフレームワークを作って、それを使わせるのがいいんじゃないかな。
>安易な実装を許して、問題が起きたところだけ個別対処するってのも生産的じゃないし

そうですね。安易な実装を許さないために、防止策として制約を加えるという消極的対策と,フレームワーク等の仕組みを作る積極的対策がありますね。
消極的対策は絆創膏的な匂いがいますね。反省材料になりました。ありがとうございました。

引用返信 編集キー/
■1834 / inTopicNo.14)  Re[7]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ 渋木宏明(ひどり) (152回)-(2007/03/07(Wed) 11:43:02)
渋木宏明(ひどり) さんの Web サイト
> そうですね。安易な実装を許さないために、防止策として制約を加えるという消極的対策と,フレームワーク等の仕組みを作る積極的対策がありますね。
> 消極的対策は絆創膏的な匂いがいますね。反省材料になりました。ありがとうございました。

小規模なモノなら消極策でもよろしいんじゃないでしょうか。
手当てに掛かるコストも小さくて済むでしょうし。

規模が大きくなればなるほど手当てや保守のコストがかさんでくるので、そういう時にこそ事前に下回りを整えてあげることでデスマーチ傾向が低まります。

引用返信 編集キー/
■1837 / inTopicNo.15)  Re[3]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ inat (1回)-(2007/03/07(Wed) 12:33:04)
No1800 (Ognac さん) に返信
> 画面遷移の方向にもよりますが、この場合は、プロジェクトは .exeプロジェクトであるべきでしょう。
> 案の定, Sub_AからSub_Bに移り,Sub_BからSub_Aに戻る必要がてぎた時に,相互参照でコンパイルエラーになってました。
デリゲートを使えば回避できると思いますが。。

引用返信 編集キー/
■1855 / inTopicNo.16)  Re[4]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Ognac (4回)-(2007/03/07(Wed) 16:25:45)
No1837 (inat さん) に返信
> ■No1800 (Ognac さん) に返信
>> 画面遷移の方向にもよりますが、この場合は、プロジェクトは .exeプロジェクトであるべきでしょう。
>> 案の定, Sub_AからSub_Bに移り,Sub_BからSub_Aに戻る必要がてぎた時に,相互参照でコンパイルエラーになってました。
> デリゲートを使えば回避できると思いますが。。
仕組みを複雑にするのも考えものかと思いますが。どうでしょう。

引用返信 編集キー/
■1857 / inTopicNo.17)  Re[5]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ inat (2回)-(2007/03/07(Wed) 17:20:36)
No1855 (Ognac さん) に返信
>>デリゲートを使えば回避できると思いますが。。
> 仕組みを複雑にするのも考えものかと思いますが。どうでしょう。
複雑ですか・・・複雑と言われてしまうとどうしようもないですが
私的にはexe分けよりかは良いと思いまして。
ちなみにVB.NETは使ったことがないのであまり詳しく言えませんが
私はC++/CLIを使っていてデリゲートの方が便利だなーと思いました。
引用返信 編集キー/
■1873 / inTopicNo.18)  Re[6]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Ognac (5回)-(2007/03/07(Wed) 20:04:35)
No1857 (inat さん) に返信
> ■No1855 (Ognac さん) に返信
> 複雑ですか・・・複雑と言われてしまうとどうしようもないですが

画面遷移は個々の画面に埋め込んだり,Delegateで処理すると遷移先が固定化されてしまい、保守性に欠けると思うのです。画面遷移クラスを作り、そちらにお任せするのが良いのではと考えます。
引用返信 編集キー/
■1902 / inTopicNo.19)  Re[7]: アプリケーション作成時に機能別にexeを分けていますか?
□投稿者/ Pandora (18回)-(2007/03/08(Thu) 15:19:08)
> 画面遷移クラスを作り、そちらにお任せするのが良いのではと考えます。

 そうであれば、なおさらexe単位で分ける必要はないのではないでしょうか?

 その画面遷移に責任を持つクラスが表示すべき画面を表示すれば良いのではないでしょうか?

 つまり、各画面は、自分の持分が終われば終了(クローズ)して、後は、画面遷移クラスに任せるというように

 すれば、複数のexeを作る必要はないと思いますが、どうでしょう。
引用返信 編集キー/
■1926 / inTopicNo.20)  Re[8]: アプリケーション作成時に機能別にexeを分けていますか?
 
□投稿者/ Ognac (6回)-(2007/03/08(Thu) 20:16:08)
No1902 (Pandora さん) に返信
 >つまり、各画面は、自分の持分が終われば終了(クローズ)して、後は、画面遷移クラスに任せるというように
 >すれば、複数のexeを作る必要はないと思いますが、どうでしょう。
言葉足らずで御免なさい。
当初の発言の前提は, 画面遷移が考慮されずに,個々の画面に無造作に記述されて、その結果、循環参照状態に陥ったプロジェクトがあったものですから,予防策としての意味合いが強いです。
キチンと画面遷移を設計すれば, 全部DLLで、Okなんです。 が,サブシステム毎にクローズなEXEにしたメリットとして,単体で動作するので,違うチーム(会社)への振り分けとテストが行えることがあります。受け入れ側の怠慢でもあるのですが、...
exeとdllの差って何! COM時代の, Inprocess/OutProcess の差ではないんですよね. 単独実行できるか否かの差でしかなければ,
dllでいいですね。発言の一部を撤回します。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -