郵便番号データクラス VB Web

郵便番号マスターデータ基本クラス・派生クラス

クラス(拡張子.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