郵便番号マスターデータ基本クラス・派生クラス
クラス(拡張子.vb)をプロジェクトに追加して、ファイル名をClsYubinBangoに変更。このクラスファイルに郵便番号データ基本クラスとその派生クラスを実装します。
【基本クラスメンバー】
基本クラス(基底クラス)ClsYubinBangoBase は抽象クラスにするので、コンストラクタを実装しません。
基本クラスClsYubinBangoBaseには、郵便番号マスター表アクセスの共通メンバーを実装します。
- 定数メンバー:郵便番号マスター表、郵便番号
 - 変数メンバー:郵便番号、都道府県名、市区町村名、町域名
 - プロパティ:郵便番号、都道府県名、市区町村名、町域名
 - メソッド:郵便番号エラーチェックメソッド
 
【派生クラスメンバー】
基本クラス(基底クラス)ClsYubinBangoBase を派生した ClsYubinBango クラスには、郵便番号マスター表の選択・更新・削除処理に必要な共通メンバーを実装します。
このクラスは、販売管理データベースアクセスクラスのメソッドを呼出しますが、このクラスで郵便番号マスターをアクセスするメソッドを実装する必要はありません。
- コンストラクタ
 - プロパティ:読取専用の郵便番号
 
ソースリスト
Option Strict On
Imports System.Text.RegularExpressions
Imports System.Data        ' DataTable型
'////////// 基本クラス:郵便番号データクラス //////////
Public MustInherit Class ClsYubinBangoBase
  '----------<< メンバー:定数>>----------
  ' 定数は大文字英数で宣言
  Protected Const TABLE_NAME As String = "郵便番号マスター表"
  Protected Const KEY_FIELD As String = "郵便番号"
  '----------<< メンバー:変数>>----------
  Protected yBangoValue As String    ' 郵便番号
  Protected tMeiValue As String      ' 都道府県名
  Protected sMeiValue As String      ' 市区町村名
  Protected cMeiValue As String      ' 町域名
  '--------------------------------------------------------
  ' プロパティ:都道府県名
  '--------------------------------------------------------
  Public Property TodofukenMei() As String
    ' Getプロパティ
    Get
      Return tMeiValue
    End Get
    ' Setプロパティ
    Set(ByVal tMei As String)
      ' 【エラーチェック】
      If tMeiValue.Length = 0 Then
        ' 未入力ならば例外スロー
        Dim msg = "都道府県名が未入力です"
        Throw New TodofukenMeiException(msg)
      Else
        tMeiValue = tMei
      End If
    End Set
  End Property
  '--------------------------------------------------------
  ' プロパティ:市区町村名
  '--------------------------------------------------------
  Public Property ShikuchosonMei() As String
    ' Getプロパティ
    Get
      Return sMeiValue
    End Get
    ' Setプロパティ
    Set(ByVal sMei As String)
      ' 【エラーチェック】
      If sMeiValue.Length = 0 Then
        ' 未入力ならば例外スロー
        Dim msg = "市区町村名が未入力です"
        Throw New ShikuchosonMeiException(msg)
      Else
        sMeiValue = sMei
      End If
    End Set
  End Property
  '--------------------------------------------------------
  ' プロパティ:町域名
  '--------------------------------------------------------
  Public Property ChoikiMei() As String
    ' Getプロパティ
    Get
      Return cMeiValue
    End Get
    ' Setプロパティ
    Set(ByVal cMei As String)
      ' 【エラーチェック】
      If cMeiValue.Length = 0 Then
        ' 未入力ならば例外スロー
        Dim msg = "住所が未入力です"
        Throw New ChoikiMeiException(msg)
      Else
        cMeiValue = cMei
      End If
    End Set
  End Property
  '*******************************************************
  ' 機能:郵便番号エラーチェックメソッド(プロシ-ジャ)
  ' 引数:郵便番号
  ' 戻値:なし
  ' 補足:エラーがあれば例外をスロー
  '*******************************************************
  Protected Sub CheckYubinBango(yBango As String)
    ' 引数設定チェック
    If yBango.Length = 0 Then
      Dim msg = "郵便番号が未入力です"
      Throw New YubinBangoException(msg)
    End If
    ' 数字以外はエラー
    If Not Regex.IsMatch(yBango, "^[0-9]+$") Then
      Dim msg = "郵便番号に数字以外の文字があります"
      Throw New YubinBangoException(msg)
    End If
    ' 郵便番号長さチェック(7桁以外はエラー)
    If Not yBango.Length = 7 Then
      Dim msg = "郵便番号の桁数が正しくありません"
      Throw New YubinBangoException(msg)
    End If
  End Sub
End Class
'//////// 派生クラス:郵便番号選択更新削除クラス ////////
Public Class ClsYubinBango
  Inherits ClsYubinBangoBase
  '=======================================================
  ' 機能:コンストラクタ
  ' 引数:郵便番号
  '=======================================================
  Public Sub New(ByVal yBango As String)
    MyBase.New()  ' 基本クラスのコンストラクタを呼び出す
    ' 郵便番号コードエラーチェック
    CheckYubinBango(yBango)
    ' 郵便番号マスター表からレコード取得
    Dim dbIO As New ClsYubinBangoTableIO( _
         TABLE_NAME, KEY_FIELD, yBango)
    Dim dt As DataTable = dbIO.GetRowsData()
    If dt.Rows.Count = 1 Then
      ' レコードがあった時
      yBangoValue = yBango       ' 郵便番号
      tMeiValue = CStr(dt.Rows(0)("都道府県名"))
      sMeiValue = CStr(dt.Rows(0)("市区町村名"))
      cMeiValue = CStr(dt.Rows(0)("町域名"))
    Else
      ' レコードが無かった時
      Dim msg = "郵便番号マスター表にレコードがありません"
      Throw New YubinBangoException(msg)
    End If
  End Sub
  '--------------------------------------------------------
  ' プロパティ:郵便番号コード(読取専用)
  '--------------------------------------------------------
  Public ReadOnly Property YubinBango() As String
    ' Getプロパティ
    Get
      Return yBangoValue
    End Get
  End Property
End Class