- PR -

null値を戻すプロパティ

1
投稿者投稿内容
るいるい
会議室デビュー日: 2002/08/26
投稿数: 3
投稿日時: 2002-08-26 20:42
初めて投稿します。よろしくお願いします。

現在、C#であるクラスをコーディングしています。
例えば、顧客を表すクラスで、最新の売上日を取得するプロパティを実装する場合など
ですが、顧客によっては、売上データが存在しない場合もあり、その場合は特定の日付を
戻す事ができません。
このような場合、以下のようにnull値を戻すようにしたいのですが、当然コンパイル
エラーとなってしまいます。

-----------------<SAMPLE>---------------------
public class customer
{
 public DateTime LatestOrderDate
 {
     :
     :
  (DBからのデータ取得)
     :
     :

  if (売上データがあったら)
      return (売上日)
  else
      reuturn null;
 }

}
----------------------------------------------

そもそも、このようなスタイルで実装しようとすること自体が良くないので
しょうか?
皆さんはこの様な場合は、どうしていますか?
お知恵を拝借できたら幸いです。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2002-08-27 03:27
Exceptionではいけないのでしょうか?
KERNEL
会議室デビュー日: 2002/06/26
投稿数: 2
投稿日時: 2002-08-27 09:47
DateTimeはクラスではなく構造体なので値型になります。
従って、nullという概念はありません。必ず値をもつので、値の内容で判断するしかありません。
例えば、売上データが存在しない場合は値がDateTime.MinValueになるとか。
もしくは、どうしてもnullを返したければ、戻り値をobject型などにします。
しかし、この方法だと、メソッドの戻り値を受け取るときに、まずnullかどうかを判断し、nullでなければDateTime型でキャストして、DateTime型の変数に代入する必要があります。
どっちが使いやすいかというと、毎回キャストするのは面倒なので、値で判断したほうがよいと思います。
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-08-27 13:18
引用:

yaさんの書き込み (2002-08-27 03:27) より:
Exceptionではいけないのでしょうか?


一票++;

というか、「売上日」って属性は「売上」オブジェクトが持ってるもんでは?
なので、「顧客」は LatestOrder() とかのメソッドで最新の「売上」オブジェクトを返せばよろしいかと。

※ 「いまここで欲しいのは売上日だけだ。 余計なデータまで持ってくるのは性能にかかわる!」と気にする人もいるでしょうが、まずはきちんとモデリングすることです。 性能が実際に問題になったときには、「売上」オブジェクトのなかでキャッシュしたり、データの取得を遅延させたりするテクニックで、たいがいは切り抜けられるのですから。
るいるい
会議室デビュー日: 2002/08/26
投稿数: 3
投稿日時: 2002-08-28 19:00
引用:

というか、「売上日」って属性は「売上」オブジェクトが持ってるもんでは?
なので、「顧客」は LatestOrder() とかのメソッドで最新の「売上」オブジェクトを返せばよろしいかと。



確かにご指摘の通り、売上日は顧客オブジェクトが持つべき物ではありませんね。
モデリングが根本的に甘くてお恥ずかしいです
もう一度、このあたりをきちんと検討しています。

皆さんご意見ありがとうございました。

1

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