商品クラス [VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしい VB2010/2008 ADO.NET

受注エントリーで使用する商品クラスは、コンストラ クタの引数に指定した商品コードのレコードを商品マスター表から取得し、プロパティを仲介して、商品名称や販売金額を取得したり、セットしたりするクラスです。

商品クラスの実装

受注エントリー画面
【基本クラスメンバー】

基本クラス(基底クラス)ClsShohinBaseに、商品マスター表の選択・更新・削除・追加処理で共通で使うメンバーを実装します。抽象クラスなので、コンストラクタは実装しません。

  • 定数メンバー:商品マスター表、商品コード
  • 変数メンバー:商品コード、商品名称、販売単価
  • プロパティ:商品名称、販売単価
  • メソッド:商品コードのエラーチェック
【派生クラスメンバー】

派生クラスClsShohinに、商品マスター表の選択・更新・削除用のメンバーを実装します。コンストラクタでは、商品マスター表からレコードを取得します。

  • コンストラクタ
  • プロパティ:商品コード
Option Strict On

Imports System.Text.RegularExpressions

'%%%%%%%%%%%%%%%% 基本抽象クラス:商品データ %%%%%%%%%%%%%%%%%
Public MustInherit Class ClsShohinBase

    '--------------------< 定数メンバー >--------------------
    Protected Const TABLE_NAME As String = "商品マスター表"
    Protected Const KEY_FIELD As String = "商品コード"

    '--------------------< 変数メンバー >--------------------
    Protected sCodeValue As String          ' 商品コード  
    Protected sMeishoValue As String        ' 商品名称 
    Protected tankaValue As Integer         ' 販売単価 

    ' MustInheritなのでコンストラクタを宣言しない

    '-------------------------------------------------------
    ' プロパティ:商品名称
    '-------------------------------------------------------
    Public Property ShohinMeisho() As String

        ' Getプロパティ
        Get
            Return sMeishoValue
        End Get

        ' Setプロパティ
        Set(ByVal sMeisho As String)
            ' 未入力ならエラー
            If sMeisho.Length > 0 Then
                sMeishoValue = sMeisho
            Else
                Throw New ShohinMeishoException("商品名称が未入力です")
            End If
        End Set

    End Property

    '-------------------------------------------------------
    ' プロパティ:販売単価
    '-------------------------------------------------------
    Public Property Tanka() As Integer

        ' Getプロパティ
        Get
            Return tankaValue
        End Get

        ' Setプロパティ
        Set(ByVal tanka As Integer)
            ' 未入力ならエラー
            If tanka =  Nothing Then
                Throw New HanbaiTankaException("販売単価が未入力です")
            End If
            ' 0以下はエラー
            If tanka > 0 Then
                tankaValue = tanka
            Else
                Throw New HanbaiTankaException _
                    ("販売単価に0円以下は設定できません")
            End If
        End Set

    End Property

    '*******************************************************
    ' 機能:商品コードのエラーチェックメソッド(プロシ-ジャ)
    ' 引数:商品コード
    ' 戻値:なし
    ' 補足:エラーがあれば例外をスロー
    '*******************************************************
    Protected Sub CheckShohinCode(ByVal sCode As String)

        ' 引数設定チェック
        If sCode.Length = 0 Then
            Throw New ShohinCodeException("商品コードが未入力です")
        End If
        ' 英数字以外はエラー
        If Not Regex.IsMatch(sCode, "^[0-9a-zA-Z]+$") Then
            Throw New ShohinCodeException _
                ("商品コードに英数字以外の文字があります")
        End If
        ' 商品コード長さチェック(5桁以外はエラー)
        If Not sCode.Length = 5 Then
            Throw New ShohinCodeException _
                ("商品コードの桁数が正しくありません")
        End If
    End Sub

End Class

'/////////////// 派生クラス:商品選択更新削除 ////////////////

Public Class ClsShohin
    Inherits ClsShohinBase

    '=======================================================
    ' 機能:コンストラクタ
    ' 引数:商品コード
    '=======================================================
    Public Sub New(ByVal sCode As String)
 
       ' 最初に基本クラスのコンストラクタを呼び出す
       MyBase.New()
       ' 商品コードエラーチェック
        CheckShohinCode(sCode)
       ' 商品マスター表からレコード取得
        Dim dbIO As New ClsHanbaiKanriDBIO( _
            TABLE_NAME, KEY_FIELD, sCode)
        Dim dt As DataTable = dbIO.GetRowsData()
        If dt.Rows.Count = 1 Then
            ' レコードがあった時は正常
            sCodeValue = sCode          ' キー値 
            ShohinMeisho = CStr(dt.Rows(0)("商品名称"))
            Tanka = CInt(dt.Rows(0)("販売単価"))
        Else
            ' レコードがなかった時は例外スロー
            Throw New ShohinCodeException _
                ("商品マスター表にレコードがありません")
        End If

    End Sub

    '-------------------------------------------------------
    ' プロパティ:商品コード(読取専用)
    '-------------------------------------------------------
    Public ReadOnly Property ShohinCode() As String

        ' Getプロパティ
        Get
            Return sCodeValue
        End Get

    End Property

End Class

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.