まずは作ってみよう
ソリューションとプロジェクトの作成
- 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桁で丸める仕様とする
- 共通的に使いそうな部分だから、関数化してみる
- 単位も表示する
このコードの問題点
- 拡張性:機能追加が困難。機能追加時にコードやDBアクセス部分が複数生まれる可能性あり。
- 保守性:ベタ書きなので、ある部分を変更した場合の影響範囲が分からない。プログラマーごとに異なる実装となる。
- 可読性:この例では評価が難しい。。。シンプルな例なので、読みやすい。
改善の考え方
- どこに知識があるか。データと処理が一体となっているか。
- テストしやすいか。ファイルやDBなど外部に依存していないか。
- オブジェクト指向の考え方を取り入れる
- 単一責務の原則
- オープン・クローズドの原則 [カプセル化]
- リスコフの置換原則 [継承]
- ドメイン駆動開発の考え方を取り入れる
- DomainService
- ValueObjects
- Entities
- Repositories
- Logics
- Exceptions
- Helpers
- Cashes
- Modules
- Shared
- Infrastructure
- Fake
- Factory
- 各種DB、外部
- WinForm, WPFViews
- ViewModels
- Test
- ViewsTest
- ViewModelsTest
- DomainService
- テストコード(+リファクタリング)を取り入れる
- MSTest など
- chainingAssersion : テストコードを読みやすい形式で記載できるツール
- Moq : モックを簡単に作成するツール
- コーディングルールを決める
- 命名規則、命名辞書
- StyleCopAnalyzers
- xml コメント
- 自動テスト [勉強中]
- OpenCover など
- Selenium など
- jenkins、Azure DevOps、Teraformなど