- PR -

クラス設計について

投稿者投稿内容
dandan
会議室デビュー日: 2002/10/24
投稿数: 2
投稿日時: 2003-10-02 12:02
はじめまして。

現在、C#とASP.NETでイントラネットで使う簡単なツールを作っているものです。
以前はVBとAccessで簡単なツールを作っていたのですが、オブジェクト指向は
あまり意識したことがなく、考え方について悩んでいます。

現在やろうとしているのは、オフコンのファイル内容を加工してブラウザで表示させる
ということです。

・オフコンのファイルはツールの定義ファイルを起動してPCで読めるCSV形式に変換している
・ファイルはAccessに格納してためておくものと変換して表示するだけでいいものがある
・ファイルは現在5つだが、これからも増える
・全てのファイルを無条件で変換したい場合と、特定のファイルだけを選んで変換
 したい場合がある

という条件だったので、とりあえず変換ツールを起動するためのクラスと、
ファイルの内容をDataTableにインポートするクラスの二つを作りました。
とりあえずこの二つのクラスは動いているのですが、実際にファイルを
操作するときは、ファイルの数分クラスを作ってその中で操作した方がいいのか
ファイル操作クラスのようなものを作ってそこでファイルによって処理を
振り分けた方がいいのか、それとも根本的に考え方が違うのか…
勉強不足で本やインターネットを見てもよく分からずに困っています…
皆樣でしたら、このような場合どう考えられますか?
考え方のヒントでもいいので、ご意見いただけたらと思っております…
よろしくお願いします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-10-02 12:31
・それぞれのファイルに格納される内容は異なる。
・でも、ファイルに対する操作はだいたい同じ。

こんな場合だったら、共通する操作をインターフェースとして
抽出しておきます。
で、ファイル毎に操作するクラスをつくるけど、そこでは
インターフェースを継承して実装を記述。
ファイルの操作はインターフェースを介して行うようにして
おけばファイルの数が増えたときも対応がちょっと楽。

そんな感じになるんですかねぇ。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-10-02 13:12
ども、ほむらです。
引用:

現在、C#とASP.NETでイントラネットで使う簡単なツールを作っているものです。
以前はVBとAccessで簡単なツールを作っていたのですが、オブジェクト指向は
あまり意識したことがなく、考え方について悩んでいます。


僕自身もオブジェクト指向ということで意識して作ったことはありませんが
デザインパターンを適切に適用していくことを考えて作ると
結果的にオブジェクト指向に結びつくんじゃないかなと
最近は考えています。
まぁ適切にというのが一番難しいところなのではないかと思うのですが。。
デザインパターンについてはJavaのほうで時々話題になってますね。


やろうとしている内容はあらかじめCSV形式に変換されたデータについて
Accessに格納してためておくものと
変換して表示するだけでいいものがある
ということなのですよね。
この部分について考えれば後は。
ラッパーをかますなどで十分対応が出来る気がします。
引用:

・ファイルは現在5つだが、これからも増える
・全てのファイルを無条件で変換したい場合と、特定のファイルだけを選んで変換
 したい場合がある


ファイルの数について考えるのではなくて
種類や用途場面として考えることが重要なのではないでしょうか?
個人的にはこの部分でクラス単位で作成する必要性は感じないのですが。。
どうでなんでしょう?
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-10-02 15:28
Mickyでございます。
いつも参考にさせて頂いています。

さて、ファイルの種類や内容にどれくらいの違いがあるのか?
にもよりますが、単純に考えられるのは
小野@EACも仰られている様に共通部分を抽出して、
これをまとめた基底クラス(抽象クラスになるかもしれません)を作って
あとはファイルの違いによりいわゆる「差分プログラミング」って
ヤツをやっていく事になると思います。

しかし、オブジェクト指向と言ってもやはりいろんなクラスの抽出法や
考え方がありますので、「これが正解」と言うのもなかなか難しいと思います。
そこで、ほむらさんのおっしゃるデザインパターンの登場となるわけですが、
これを一朝一夕に理解&使いこなすもの大変かもしれません。
大変じゃない方ももちろんいらっしゃるとは思いますが、
バイブルと言われているあの本を理解するのはちょっと大変でした
ただ、習得した後の効果は絶大かもしれません・・・

そこで、モデリングツールはなにかお使いですか?
オブジェクト指向なりデザインパターンなりを使うのなら
やはりUMLは使えた方がいいと思います。
クラス図よりコラボレーション図を描きながら、
「あぁでもない、こうでもない」とやっていると、
自ずとベターな形が見えてくるような気がします。
(この過程で継承やら、デザインパターンやらいろいろ考えながら
試行錯誤するとモアベターです)

最終的には、「この位だったらクラスにするほどでもないか」
と言う解に辿り着くかもしれませんし、
今までは考えも付かなかった自分でも驚く程の
ブリリアントな クラス構造を考え付くかもしれません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-02 17:26
引用:

Mickyさんの書き込み (2003-10-02 15:28) より:

そこで、モデリングツールはなにかお使いですか?
オブジェクト指向なりデザインパターンなりを使うのなら
やはりUMLは使えた方がいいと思います。


 VS.NETでUMLツールを使おうとすると、まず.NET Frameworkの型を入れ込むのが・・・同じメーカーなんだからVISIOには用意しておいてくれぇ〜!さらに、UMLでは「プロパティ」が用意されていないので、これがまた悩みどころ。。。

 しかし、クラス図ではなく、コラボレーション図ですか。ふ〜む??それはいいかもしれない。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-10-02 17:57
引用:

Jittaさんの書き込み (2003-10-02 17:26) より:
 VS.NETでUMLツールを使おうとすると、まず.NET Frameworkの型を入れ込むのが・・・同じメーカーなんだからVISIOには用意しておいてくれぇ〜!さらに、UMLでは「プロパティ」が用意されていないので、これがまた悩みどころ。。。




そうなんですよ!
.NETクラスライブラリはその都度必要なものを
ステレオタイプ付けてなんとか体裁つけてるんですが、
プロパティはかなり苦労しますね。ってか、無理なんですもんね
無理やりC++の様に、set、やらgetやら付けて区別してますが、
結構辛いです。

自分の思考を整理するのには使えるのですが、
正式なドキュメントとしては、難しいかなぁ〜〜(−−;
dandan
会議室デビュー日: 2002/10/24
投稿数: 2
投稿日時: 2003-10-02 19:06
皆様、いろいろなご意見ありがとうございますm(__)m
とても参考になります。
やはり、一人で悩んでいるとだんだんなにがなんだか分からなくなってしまうので…(--

なんとなく見たことがあるなぁ…というぐらいの言葉がたくさん出ていて、
とりあえずそれを調べるところから始めなくては…
やはり設計というのは奥が深そうですでにおびえていますが、
とりあえず共通な部分と役割に応じて個別に考えないといけないことをごちゃごちゃに
していたようなので、そこから分けてよく考えてみようと思います。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-10-02 22:36
>現在やろうとしているのは、オフコンのファイル内容を加工してブラウザで
>表示させるということです。
当然MVCをベースにするのでは.
C#にだってJ2EEと同程度の機能はあるでしょう.

重要なのは,オフコン部分をラップして,オフコンの存在をオブジェクト
指向の側から意識しなくて済むようにするという考え方.

>操作するときは、ファイルの数分クラスを作ってその中で操作した方がいいのか
>ファイル操作クラスのようなものを作ってそこでファイルによって処理を
>振り分けた方がいいのか、それとも根本的に考え方が違うのか…
こういうのはケースバイケースです.
ファイルの数や処理の違いなどによっても変わってきます.
でもファイル数分のクラスを作るのは十中八九,間違いだと思います.
継承や差分プログラミングを使うとしても,それは継承の乱用に
つながりかねない.

デザインパターンやjava.ioパッケージ,あるいはJDBC(オブジェクト指向と
非オブジェクト指向との仲介役という点が共通,こういうのは一般には
あまり綺麗な設計にはならない.)などを勉強すれば,手がかり程度は
つかめると思います

スキルアップ/キャリアアップ(JOB@IT)