• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データ保持クラスでラッパークラスとシリアライズ)

ラッパークラスとシリアライズについて

このQ&Aのポイント
  • C#のDataContractSerializerを使用して、XML保存を行っている際に、基本データ型ではなくラッパークラスを使用することをアドバイスされましたが、そのメリットが分かりません。
  • 一つのクラスが増えると、[DataContract]の増加や要素の増加によって、XMLの可読性が低下してしまう可能性があります。
  • 保存をRDBMSにしても、処理が面倒になるかもしれませんが、意味付けでの利便性は考慮する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • catpow
  • ベストアンサー率24% (620/2527)
回答No.1

質問者さんが「こういう基本型で細々とラッパークラスを作るとなると、保存処理が結構面倒くさくなる気がします。」などと疑問に感じられていることは、たぶん正しいと思います。 今から数十年前、「オブジェクト指向(言語)で開発すれば、開発も保守も楽になる!」と世の中が騙された時代がありました。 実際の現場では、開発が楽になることも、保守が楽になることもなく、逆に大変になったことが多かったのではないでしょうか? ただ、それ以降も、「開発がいかにすれば楽になるか?」「機能拡張や変更がいかにしたら楽になるか?」という研究は進められてきており、オブジェクト指向にとらわれることなく、さまざまな技術が開発されてきたと思います。 たとえば、質問者さんが、電話番号やEmailなどを画面から入力したり、それをRDBMSに保存したり、検索したりするソフトを作りたい場合、C#のEntity Frameworkを使えば(その技術に関して、そこそこの勉強時間が必要ではありますが)ラッパクラスとか、シリアライズなんてことを考えることなく、簡単にプログラムができあがります。 別の例にたとえれば、すばらしい剣の技があって、「その流儀をマスターすれば剣豪になれる!」として苦しい修行(=オブジェクト指向の勉強)をやったけど、いつの間にか、時代はライフル銃の時代(=Entity Framework)となり、はるかに効率よく敵を倒せるようになっていたという感じかもしれません。 Entity Framework、Linq、ラムダ式という技術を使えば、データベースの生成を自動でやってくれたり、複雑なSQLを記述することなく、データが検索や更新処理が行なえますよ。 なお、私は最近、C#がメインの開発言語で、Entity Frameworkを使っているので、他言語のことはよく知りませんが、他の言語でも似たような仕組みが導入されていて、同じように、お手軽開発が可能になっているのではないかと推測しています。

noname#220775
質問者

お礼

確かに! 妙に大変な部分が多いですね! ただ上がこういうやり方でって感じで言ってくるのでオブジェクト指向を中心にやるしかない状態ですが。 Entity Frameworkはまだ触ったことがなかったです。 Linqやラムダ式は使ってますのでプラスEntity Frameworkですね。 調べた限りかなり便利そうなのでさっそくそちらで試してみたいと思います。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.2

>>ただ上がこういうやり方でって感じで言ってくるのでオブジェクト指向を中心にやるしかない状態ですが。 日本のIT業界って、「人貸し業」、「人身売買」とか「多重派遣」「偽装請負」などとしばしば、問題視されて批判されます。 でも、それ以上に、「商売のネタ」であるはずのプログラミング技術、開発技術自体の向上には、あまり注意が払われていない点が問題だと思っています。 でも、考えてみたら当然なんですよね。商売の見積りは、根本的な尺度が「人月単価」となっています。 会社経営者とすれば、100人月の見積りとなる仕事と、10人月になる仕事では、前者のほうが売上・利益ともずっと大きくなります。 仮にオブジェクト指向で、開発工数が10分の1に大幅削減になるとしたら、経営者としては、「オブジェクト指向の勉強やって、その結果、売上・利益が下がるなんてバカバカしい」となりますよね? 「全体の開発工数の下がるような、新しい提案はするな!!」という指示を出す会社もあるそうですからね。 また、IT業界をめざす人達も、「プログラミングの技術を覚えると、SEじゃあなく、PGにされる。地位も給与もSEのほうが上。だから、プログラムの勉強なんてすべきじゃあない」という判断をする人達が、わりと多かったみたいです。 さらに、質問者さんが書かれたように、「上からの指示」とか、「杓子定規のセキュリティ」「開発リスク回避」という視点から、「よさそうだけど、リスクありそうなことはしない」として、便利なオープンソフトやツールを使ってはいけないという職場も多いです。(私は、派遣でIT業界では有名な大企業から銀行とか、流通などの開発現場で働きました) ちなみに、海外では、SE的な職種(人に指示して、自分では物作りしない職種)は存在しないという書き込みを目にしたこともあります。 自分でものづくりができないSEは、海外のIT市場では、「何もできない人」に分類されるらしいです。 >>調べた限りかなり便利そうなのでさっそくそちらで試してみたいと思います。 Entity Frameworkは、とても便利で、データベース関連の処理を楽にしてくれますよ。 「ちょっとこのプログラムの機能を変えてほしい!」という要望も、気楽に引き受ける気にさせられます。 ただし、日本語の情報がとても少ないですし、あっても、古いバージョンの解説記事だったり、それを新しいバージョンで使うとエラーになったり、エラー原因を調べるのに苦労します。 また、最新のマイクロソフトのVisual Studio2015は、オープンソースを積極的に利用しているようです。 上記のような、上から、「これはいいけど、あれやこれしてはダメ!」って言ってくるタブーが多い職場では、使うのが難しいかもしれません。

noname#220775
質問者

お礼

そうですね。 うちもこれはダメあれはダメのオンパレードです。 そのくせ上がおもしろそうなのを見つけると振ってくるっていう無茶ぶりなんですが。 で、さっそくEntity Frameworkを自宅で試してみました! すごくいいですね! 仕事に直結するのが難しそうですが、自分で使う分にはものすごく助かりそうです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ラッパークラスって何ですか?

    PHPにおける、ラッパークラスの定義を教えてください。 検索すると、JAVAに関する説明しか出てこなかったので…。 親クラスってことでしょうか? 例えば、$_SESSION変数のラッパークラス って、どんな意味なのでしょうか? $_SESSIONに関する処理を自分で使いやすいように まとめたクラスのことでしょうか? 普通のクラスとは、何が違うのでしょうか?

    • ベストアンサー
    • PHP
  • クラスと関数群のうまい使い方

    今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。 ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。 今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。 それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。 が、全てのクラス(もしくはいくつかのクラス)で共通して使用する処理(文字列操作など)はどうすればいいのかと悩んでいます。 それぞれのクラスに同じ処理を書くのは、クラスを使う意味がない気がするので、避けるべきだと考えていています。 そこで、今までのように共通の処理を関数群にして、クラスファイルでインクルードして使うか、共通処理をもつクラスを作って使用するクラスの中でインスタンスを作成して処理関数を呼び出すか・・・とどちらがいいのでしょうか? ただ、関数群をまとめたファイルを作ると、他にクラスを使う意味がないような気もするし、共通処理をまとめたクラスを作ってその処理を利用するクラスでインスタンスを作るのは、処理的に重くなりそうでまたクラスの本来の意味からすると共通処理をまとめたクラスというのがおかしい気もするし。 根本的にクラスの作り方がまずいのかもしれませんが、良いアドバイス等あればご指摘下さい。 長文になりましたが、よろしくお願いいたします。 追伸) PHPでのクラスの学習についていい本やサイトなどあればそちらもお教え願えればと思います。

    • ベストアンサー
    • PHP
  • 【ActionScript】クラス化のメリットは?

    Flash CS3 使用者です。 あまりに基本的な質問で申し訳ありません。 ちょっとぐぐったのですが意外といい回答が見つからず質問させていただきます。 関数(function)とクラス(class)は用途が似ていますがレベルが高い人ほどクラスで処理している(ような気がする)のはなぜでしょう。 1)クラスにできて関数にできないことは何か。 2)クラス化しておかないとどういうとき困るか。 このへんを中心に解説していただくと助かります。 よろしくお願いいたします。

  • ユーザー定義関数とクラスの違いとは?

    間違えて違うカテゴリーに質問してしまったので、 そちらを削除して、質問させていただきます(レスも幸いなかったため)。 PHPを勉強して1ヶ月の初心者です。 ホームページを作ろうとして、本に書いてあったプログラムを元に、 付け足したり、削ったりしていました。 そして、プログラムが長くなってきたので、外部ファイルに処理を分割してみました。 どの本にも、「クラス」「オブジェクト指向」という言葉が強調されていたので、 とりあえずクラスにしてみました。 しかし、クラスの中で処理をした変数を取り出すのが手間に感じます (クラス内では「$this->変数名」、クラス外では「$クラス名->変数名」と書く手間が・・・)。 本の中には、クラスを使わずに、 ユーザー定義関数のみのfunctionをまとめた外部ファイルを 作成している例が多い気がします。 そこで質問なのですが、 処理を分割して外部ファイルにするとき、 「メソッドをまとめたクラス」にした方がいいのでしょうか? それとも、「ユーザー定義関数をまとめたもの」にした方がいいのでしょうか? また、「こうゆう場合は、クラスにした方がいい」「ユーザー定義関数にした方がいい」などの 条件がありましたら、教えていただきたいです。 本やネットを調べても、使い分けについて書かれているページがなく、 今後の作成のためにも、ぜひ知っておきたいです。 すべてクラスにした方が今後よいようでしたら、全部クラスのままで作れるよう、 慣れていきたいとも思ってもいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • C++でのDirectXプログラミングについて

    自分は、VC++を使ってDirectXプログラミングを行っているのですが、 Webや書籍で公開されている方のコードを見ていると、 クラスを定義していくオブジェクト指向の形式ではなく、 ただ処理を書き下していく構造化言語の形式をとるコードを多く見かけます。 自分は、C++でプログラミングを行っていると言うことで、 機能毎にクラスをひとつひとつ丁寧に定義して、プログラムを作っている最中なのですが、 人にクラスを使ってもらうわけでない以上、処理を書き下す形式で問題ないように思えてきました。 クラスの定義をクラス毎に書かない分、コードを書くのが早いように思うので、 むしろ処理を書き下す形式の方が良いようにも思うのですが、 オブジェクト指向がもてはやされている世間体を考えると、 自分の考えに自信が持てないので、玄人の方の意見を参考したいと質問させて頂きました。 意見をお聞かせ下さいませんか?

  • SAXによる文字データの読み込み方法

    現在、自作アプリのデータをXMLでファイルに保存し、SAXで読み込み処理をしようと考えております。 データは、次のようなものと仮定します。 <歌> <曲名>○○の歌</曲名> <作曲者>某 太郎</作曲者> </歌> 上記のようなXMLの場合、曲名、作曲者をcharacters()で得ることとなると思うのですが、どちらのデータなのかを判断する方法が分かりません。 startElement()で場合分けして、フラグをたてておいて、characters()内で、そのフラグを見て判断するしかないのでしょうか? なんか、スマートでない気がして、なにかいい方法がないかと悩んでいます。 ファイルから読み込んで、すぐに自前のクラスに代入するのですが、DOMでツリーを作った方がいいのでしょうか? なにか、よい方法をご存じでしたらご教授下さい。 よろしくお願いいたします。

    • 締切済み
    • XML
  • クラスについて~根本的なことなんですが

    プログラムの経験はCOBOL程度で、 先月からJAVAの勉強を始めました。 プログラムを作成する上での機能や定義や、 サンプルプログラムの流れや処理内容を理解することは 出来てきたのですが、 実習問題で ・CheckDataクラスのCheckNumber()メソッドは、引数に渡された数値の 正負を判定し、正の場合trueを返します。 ・以下の実行結果になるようにプログラムを作成してください。 <実行例> -1 is a negative number. 2 is a positive number. -50 is a negative number. 100 is a positive number. <CheckData.java> public class CheckData { public boolean checkNumber(int data) { if (data >= 0) { return true; } else { return false; } } } <UsePackage.java> class UsePackage { public stativ void main(String args[]){ int num[] = {-1, 2, -50, 100}; } } <条件> ・確認する数値は、UsePackageクラスに定義されたnum配列の整数を使用する。 ・CheckDataクラスはhoge.pkglabsにパッケージする という問題が出たときに、 どちらのクラスに System.out.println(正負の表示); 等の処理を入れればいいのか、 どの処理は何処のクラスに入れればいいのか等が ちんぷんかんぷんです。 新たなクラスをファイルを作るべきなのかも分からなく、 実際上の問題で新たなクラスファイルを作ろうとしてました。 実際一から作る時が来るかと思いますが、その時を考えると 焦ってしまいます。 私がオブジェクト指向の考え方を分かったつもりで、 実は正しく理解出来ていないのかもしれません。 Javaを習い始めた時に同じ問題にぶつかった方、 乗り越えた方がいらっしゃいましたら、 是非その勉強法(?)、クラスやプログラムの組み方を教えていただきたいのです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • クラスモジュール

    クラスモジュールについて詳しく使い方を知りたいのですが 様々な本を見ましたが、ほとんどの本が1~2ページ程度の軽い説明で終わらせているのがほとんどです。(特にVBA系は) これについて詳しく書かれた本をお知りの方がいましたら教えていただけないでしょうか?VBAはないと思うのですがVBで大丈夫です 特に配列(行列)を渡したりして計算させるやり方が知りたいです。コントロールなどを使ったものではなく(基本的には同じかとも思いますが) よろしくお願いします。

  • クラスの使い方

    php5です。 --- test1.class.php --- class TEST1 { function hoge1() { // 実際に複雑な処理ですが概要として簡易化してます $aaa = 'hoge1'; // クラスの実行で単純に戻り値を返す return $aaa; } } --- test2.class.php --- class TEST2 { function hoge2() { // 実際に複雑な処理ですが概要として簡易化してます $bbb = 'hoge2'; // クラスの実行で単純に戻り値を返す return $bbb; } } --- MySmarty.class.php --- require_once 'test1.class.php'; require_once 'test2.class.php'; class MySmarty extends Smarty { function MySmarty() { //ここでclassTEST1,2の戻り値を利用しif文で分岐をしたい if ($aaa == 'hoge1') { $ccc = 'あああ'; } elee { $ccc = 'いいい'; } if ($bbb == 'hoge2') { $ddd = 'ううう'; } elee { $ddd = 'えええ'; } $this->assign('aaa', $aaa); $this->assign('bbb', $bbb); ・・・ } } このような使い方はできないものでしょうか?クラスに触れてまだ間も無く理解も深めれて いない状態で参考サイトなどを調べてみたのですがこのような使い方を書いている説明は みつかりませんでした。 思いつく方法としてはMySmartyに継承すればいいようなのですが継承は1つまでと 制限があるようでそれもできない状態です。 単純に1つのクラスにまとめて書けば済むような気もあるのですが他にも別のクラスの 戻り値を利用して分岐等をさせたく思っているのですがこの場合どうすればいいのでしょうか? もし不可能な場合(可能だけど方法的に良くない場合)の別の方法としてアドバイスを 頂けますと幸いです!宜しくお願いします!

    • 締切済み
    • PHP
  • 「クラスプロパティ」 or 「セッション」保存?

    ・「クラスプロパティ」 へ保存するか、「セッション」へ保存するか迷っています ・両者の寿命の差はどうなっているでしょうか? ・特に「クラスプロパティ」の方を知りたいです ・そのクラスが読み込まれ続けている限りは、「プロパティ」へ保存したデータは読み込み可能? ・あるいは、生成したインスタンスが破棄されない限りは、「プロパティ」へ保存したデータは読み込み可能? ・もしくは、画面を更新しない限りは、「プロパティ」へ保存したデータは読み込み可能? ・利用は、AJAXで画面遷移なしで進んでいく場面間のデータ保持を想定しています ・また、例えば複数人が同時にアクセスして同じ処理が走った場合、「クラスプロパティ」の値は個別保存されるのでしょうか? ・「クラスプロパティ」ではなく「インスタンスプロパティ」だったら、複数保存OK?

    • ベストアンサー
    • PHP