Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

冗長さと読みやすさの葛藤


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim 得意先CODE As String = "123-456"
        Dim 得意先名 As String = String.Empty
        Dim 値引率 As Double = 0
        Dim rc As Boolean = get_得意先名と値引率(得意先CODE, 得意先名, 値引率)
    End Sub
    Private Function get_得意先名と値引率(ByVal 得意先CODE As String, ByRef 得意先名 As String, ByRef 値引率 As Double) As Boolean
        'DB_access
        'DB_accessが正常終了のとき
        得意先名 = "xxxx"    ' select 得意先名 from 得意先TBL where 得意先CODE=得意先CODE の結果を代入
        値引率 = 22.2        ' select 値引率 from 値引率TBL where 得意先CODE=得意先CODE の結果を代入
        Return True
        'io Erroのときは return false
    End Function
    '
    ' という記述はありがちだが,推奨できません。理由として, 引数にByRef を使用している。メソッド[get_得意先名と値引率()]で違うテーブルをアクセスしている。

    'スッキリさせるために
    '  select 得意先名 ,値引率  from 得意先TBL A,値引率TBL B where A.CODE = B.CODE    で取得する.
    'というのが , DBからみたスッキリする方法ですが, メソッドの引数にbyrefが残るのが不満。


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim 得意先CODE As String = "123-456"
        Dim 得意先名 As String = get_得意先名(得意先CODE)
        Dim 値引率 As Nullable(Of Double) = get_値引率(得意先CODE)
    End Sub
    Private Function get_得意先名(ByVal 得意先CODE As String) As String
        Dim 得意先名 As String = "xxxx"    ' select 得意先名 from 得意先TBL where 得意先CODE=得意先CODE の結果を代入
        Return 得意先名
        '該当なしの時は return nothing
    End Function
    Private Function get_値引率(ByVal 得意先CODE As String) As Nullable(Of Double)
        Dim 値引率 As Nullable(Of Double) = 22.2     ' select 値引率 from 値引率TBL where 得意先CODE=得意先CODE の結果を代入
        Return 値引率
        '該当なしの時は return nothing
    End Function

    というふうに, メソッドの役割は一つにし、結果を戻り値で戻すようにしています。
    DB_IOからみて冗長な点があります。

    Table-Access用のクラスを作成する。

Public Class 得意先関係
    '============
    Private 得意先名 As String
    Private 値引率 As Nullable(Of Double)
    '============
    Public Sub New(ByVal 得意先CODE As String)
        'select 得意先名 ,値引率  from 得意先TBL A,値引率TBL B where A.CODE = B.CODE  and a.CODE=得意先CODE       'を実行
        得意先名 = rs("得意先名").tostring
        値引率 = rs("値引率")
    End Sub
    '============
    Public Function get_得意先名(ByVal 得意先CODE As String) As String
        Return 得意先名
        '該当なしの時は return nothing
    End Function
    '============
    Public Function get_値引率(ByVal 得意先CODE As String) As Nullable(Of Double)
        Return 値引率
        '該当なしの時は return nothing
    End Function


End Class

これを使って

    Dim cls as new 得意先関係("123-456")
    Dim 得意先名 As String = cls.get_得意先名()
    Dim 値引率 As Nullable(Of Double) = cls.get_値引率()

私としては、これが,スッキリしていると思っています。
ソースの量はべた書きに比べて,増加するので,その面では冗長だともいえる?

 この時,得意先コードが未設定のとき,nothingで戻すか, 例外を発生させるか,悩むところです。
アプリの性質をみて使い分けるんでしょうね。

 

投稿日時 : 2006年12月25日 1:21

Feedback

# re: 冗長さと読みやすさの葛藤 2006/12/25 21:37 Jitta

 「得意先」というクラスを作り、"Function Get得意先(得意先コード As String) As 得意先"を作ります。
得意先クラスが持つメンバに、「値引率」があります。

# re: 冗長さと読みやすさの葛藤 2006/12/26 0:14 Oganc

そうか..そうですね. 論理テーブルを基準にすればすんなりしますね.ありがとうございました。

# vkTgtElUqgBc 2011/12/26 23:06 http://www.discreetpharmacist.com/ita/index.asp

The material is on the five plus. But there is a minus! My internet speed 56kb/sek. The page was loading for about 40 seconds!...

# VGGnIImMwmahkhTkMlT 2012/01/14 2:53 http://www.michelegreenmd.com/

comment6

タイトル
名前
Url
コメント