つくるちから

ドメイン駆動開発練習

まずは作ってみよう

ソリューションとプロジェクトの作成

  • Visual Studio を立ち上げる
  • Windows Form プロジェクトを含む、ソリューションを作成する
    • C# の.Net Framework に対応したプロジェクトを選択しておくこと
    • プロジェクトは、画面をもつ View を作成する

画面の作成

  • ラベルや、テキストボックス、ボタンを配置する
  • Text や、Name を設定する。
  • ボタンなどは、クリックイベントを生成する

データベースの作成

  • データベースを組み込んだアプリを作成する。
    • データベースには SQLite を用いる。
  • SQLite 用のGUIの管理ツール「PopSQLite」を利用する
  • テーブルを作成する
  • ダミーデータをいくつか登録しておく

とりあえずコーディング

  • View に直接ロジックを書き込んでいく。ボタンクリックの部分に書いてみる。
  • データベースから値をとって、画面に表示するプログラムを書く

データベースアクセス

  • NuGet より、System.Data.SQLite をインストール。
    • インストール後は、一度、Visual Studio を閉じて、再度立ち上げること。
  • DataTable を利用して、DBの内容を受ける。
  • SQL コマンドを作成する。パラメータを入力できるように作成する。
  • コネクションを作成する。SQliteConnection。usingを使うこと。
  • SQL コマンドを実行する。SQLiteCommand。usingを使うこと。
  • コネクションを開く。connection.Open();
  • SQL コマンドにパラメータを入力する。
  • アダプターを作成する。SQLiteDataAdapter。usingを使うこと
  • DataTabel にアダプターからデータを取り込む。adapter.Fill(dt);
  • DataTable から、値を読みだす。文字列や数値に変換しながら取り出す。

小数点以下2桁に丸める

  • 画面に表示する値は、小数点以下2桁で丸める仕様とする
  • 共通的に使いそうな部分だから、関数化してみる
  • 単位も表示する

このコードの問題点

  1. 拡張性:機能追加が困難。機能追加時にコードやDBアクセス部分が複数生まれる可能性あり。
  2. 保守性:ベタ書きなので、ある部分を変更した場合の影響範囲が分からない。プログラマーごとに異なる実装となる。
  3. 可読性:この例では評価が難しい。。。シンプルな例なので、読みやすい。

改善の考え方

  • どこに知識があるか。データと処理が一体となっているか。
  • テストしやすいか。ファイルやDBなど外部に依存していないか。
  • オブジェクト指向の考え方を取り入れる
    • 単一責務の原則
    • オープン・クローズドの原則 [カプセル化]
    • リスコフの置換原則 [継承]
  • ドメイン駆動開発の考え方を取り入れる
    • DomainService
      • ValueObjects
      • Entities
      • Repositories
      • Logics
      • Exceptions
      • Helpers
      • Cashes
      • Modules
      • Shared
    • Infrastructure
      • Fake
      • Factory
      • 各種DB、外部
    • WinForm, WPFViews
      • ViewModels
    • Test
      • ViewsTest
      • ViewModelsTest
  • テストコード(+リファクタリング)を取り入れる
    • MSTest など
    • chainingAssersion : テストコードを読みやすい形式で記載できるツール
    • Moq : モックを簡単に作成するツール
  • コーディングルールを決める
    • 命名規則、命名辞書
    • StyleCopAnalyzers
    • xml コメント
  • 自動テスト [勉強中]
    • OpenCover など
    • Selenium など
    • jenkins、Azure DevOps、Teraformなど

  • この記事を書いた人

ゆうさん

ソフトウェア開発のプロジェクト管理を13年やってきました。開発プロジェクトの管理だけではなく、自分のソフトウェアを作りたいと思うようになり、プログラミングを勉強中。レゴ好き。レゴ友募集中!!

-つくるちから
-