いしもち通信

お魚大好き人間の情報交換。旅先の思い出情報交換。
サーバー管理。学校でのAccess利用。PC関連情報。
社会問題。

オブジェクト指向プログラミングについて考える2

2018-04-18 22:03:51 | Weblog

View(Form1)の役目は、Controllerにコントロールの値(textboxの値)を伝えること、そしてメソッド(Yno)を呼び出すこと。

 フォームに追加するコードは、//の部分だけ。

Controllerクラスのメソッドを呼び出すため、インスタンスを生成して、変数に格納。

public partial class Form1 : Form

{

  private Controller controller;      //private変数に格納

  public Form1()

  {

     InitializeComponent();

     controller = new Controller();     //コンストラクターでインスタンス生成

  }

--------------略---------------- 

ボタンのクリックイントに追加するのは、//の部分だけ。

textbox1の値をControllerに渡し、メソッドを呼び出す。

///の部分はおまけ、結果を別の場所で利用できるようにクリップボードにコピーしておく。

 private void button1_Click(object sender, EventArgs e)

{

  controller.Jcode = textBox1.Text;              //コントローラーに渡す郵便番号

  string gt = controller.Yno();                      //メソッドの呼び出しと戻り値が入る変数

  textBox2.Text = gt;                             //戻り値(住所)をtextboxに表示

  Clipboard.SetText(gt);                               ///クリップボードにコピー

}

 このように、フォームのコードは少なくごく簡単なものである。実行結果を示すと

 Controllerはフォームから受け取った情報もとに、処理はModelに任せます。

コンソールアプリ(Model)のYubinクラスのYnoメソッドを呼び出し、結果を受け取ります。

 public class Controller

{

   public Controller()

   {

      Yubin yubin = new Yubin();

    }

    public string Jcode { get; set; }    //フォームから受け取るプロパティJcode

 

    public string Yno()

   {

      var gtcreator = new Yubin();

      return gtcreator.Yno(Jcode);

    }

}

 

以上、出来上がっているコンソールアプリ(Model)は全く変更なく、ViewとControllerとの連携がとれました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オブジェクト指向プログラミングについて考える1

2018-04-18 10:05:45 | Weblog

 javaをかじった経験から言えば、必ず出てくる「クラス」「クラスの継承」「インターフェース」などなど、分かったようで結局定着しない。分かりやすい例え話の説明も概念としては理解できるが、実際の場面でどう応用すべきか発想ができない。まあ、自身の力不足と言ってしまえばそれまでだが、そもそも、

textBox1.Text=”なんちゃらかんちゃら”;

とか、当然のように使っているから「クラス」など特に意識していない。

VSで、フォームアプリケーションを新規作成すれば、自動的にForm1のデザイン画面が表示される。実行すればForm1が表示される。デザイン画面で見ているForm1が実体だと思ってしまうのも無理はない。

従って、Form1とForm2がある場合、Form2を呼び出そうと思い

DoCmd.OpenForm ”Form2” のような

Accessの感覚でコードを発想すると痛い目に会う。

なんでこんな簡単なことができないのだろうと思ってしまう。

そこで初めてFormも「クラス」だと思い知る。

Formクラスを継承したForm1やForm2なのである。

「インスタンス」を生成しなければ、呼び出せないのである。

VSでは簡単に開発できるが、反面意識が及ばない部分が多々ある。

 データベースプログラミングで経験したtextboxのVisibleプロパティの件だが、改めて思う。デザイン画面でVisibleをFalseに設定するとデータバインドしないという事実。インスタンス生成時にそもそも描画対象とならないのだから、バインドもされないと理解できる。

話を元に戻そう。

 今回、オブジェクト指向を明確に意識できるよう、MVCに挑戦しようと思う。

課題は、住所録で登場した、郵便番号から住所を検索する部分だけを取り出してみる。

まずコンソールアプリケーションで課題となるロジックを作成する。

データベースへの接続はADO.NETを使う。検索結果としての住所は、SQLで抽出する。

実行結果の画面を示すと

 

さて、次回はこのModel(ロジック)をどのように、View(ビュー、いわゆるフォーム)、と連携させるかである。Controller(コントローラー)はどうすればよいのだろう。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする