C# アプリ開発:Tim Corey の「チームフォーム作成パート 2」(Lesson 13) を通じた深堀り
この記事では、ティム・コーリーの"C#アプリ完成まで"シリーズのレッスン13に従い、C#アプリケーション開発をより深く見ていきます。 ティムは、Windows Formsアプリケーション構築のプロセスを案内し、コンボボックス、リストボックス、ボタンなどのUIコントロールをデータに接続する方法に焦点を当てます。 このレッスンは、データバインディング、リスト管理、Dapperを使用したデータベース接続、基本的な検証とデバッグなど、現実のC#アプリケーションを構築するための重要な概念を示します。
チームフォーム作成の継続
ティムは、レッスン13は前のビデオの続きで、"新しいメンバー追加"セクションが接続されたことを思い出させます。このレッスンでは、プランを明確に設定します: このレッスンはUI配線、データムーブメント、リスト同期 - C#デスクトップアプリケーション構築の基本であるものに焦点を当てます。
ドロップダウンとリストボックスデータの理解
ティムは、コンボボックスとリストボックスの背後に、Personオブジェクトのリストがあることを説明します。 これはWindows Formsでのデータバインディングの典型的な例であり、UI要素がデータモデルのコレクションにバインドされます。
彼はクラスレベルで二つのプライベートリストを作成します。
availableTeamMembers – チームに追加できる人たち
- selectedTeamMembers – すでにチームに追加された人たち
ティムは期待される挙動を明確にします: ドロップダウンで人が選ばれ追加されたとき、彼らはavailableTeamMembersからselectedTeamMembersに移動するべきです。 これはデスクトップアプリ開発における標準的なCRUD操作パターンであり、UIが基盤となるデータを反映します。
ティムがトーナメントでチームメンバーを制限しない理由
ティムは一般的な設計の質問に回答します。"なぜトーナメントに基づいてチームメンバーを制限しないのか?"彼は、チーム作成フォームがトーナメントに直接紐づけられておらず、複数のトーナメントが同時に行われる可能性があるためだと説明します。
ティムは実用的な例を使用します: バスケットボールのトーナメントと卓球のトーナメントが両方走っている場合、人は両方に参加することができます。 ドロップダウンを制限すると複雑なロジックが必要になり、バグを導入する可能性があります。 代わりにティムはシンプルなアプローチを選びます。
- チームに追加された後で初めてドロップダウンから人を削除します。
これは重要なソフトウェア設計の実践を示しています: 必要でない限り過度に複雑にしないことです。
WireUpListsメソッドの作成
リストをUIコントロールに接続するためのWireUpListsというメソッドを作成します。 このメソッドは、availableTeamMembersリストをコンボボックスに、selectedTeamMembersリストをリストボックスにバインドします。
モダンなWindows Formsでは、BindingSourceを使わずにリストをコントロールに直接バインドできることが、重要な改善点であることを示しています。 これはWindows Formsデータバインディングに取り組んでいる開発者への有効的なヒントです。
フルネームによるDisplayMemberの追加
コンボボックスが読みやすい名前を表示する必要があることをティムは説明します。 DisplayMemberプロパティは、Personモデルからの文字列プロパティを期待します。 姓または名のみを使用すると重複を引き起こす可能性があると警告します。
そこでティムはFullNameという読み取り専用プロパティを作成します。
public string FullName
{
get
{
return "${FirstName} ${LastName}";
}
}これは重要なUIの実践を示しています: 常にUIがユーザーフレンドリーな情報を表示し、生のオブジェクトデータを表示しないようにします。
テスト用のサンプルデータの作成
ティムは、リストとUIをテストするためのCreateSampleDataというメソッドを作成します。 彼はサンプルのPersonオブジェクトを両方のリストに追加し、コンストラクターでWireUpListsを呼び出します。
これは、実際のデータベースに接続する前にWindows Formsアプリケーションを迅速に構築してテストするための便利な技術です。
サンプルデータを実データに置き換える
ティムはサンプルデータをコメントアウトし、実データをロードする準備をします。 彼はIDataConnectionインターフェースにGetPerson_Allメソッドを追加します。 ティムは自身の命名規則を説明します。
Create = 挿入
- Get = 選択
これはC#アプリケーションにおけるデータアクセス層の標準的な命名戦略です。
Dapperを使用したSQLデータ取得の実装
ティムはDapperとストアドプロシージャを使ってGetPerson_AllのSQLバージョンを実装します。
connection.Query<PersonModel>("spPeople_GetAll").ToList();ティムはデバッグが容易になるように、意図的に直接の戻り値ではなく出力変数を使用しています。 これはデバッグの実践がコード設計にどのように影響するかを示しています。
定数を使った繰り返しコードのクリーンアップ
ティムは繰り返される接続文字列名に気づき、それらを定数に変更します。 彼は、繰り返しは悪い慣習であり、後にエラーを引き起こす可能性があると説明しています。
これは重要なソフトウェア工学の原則です: DRY(Don't Repeat Yourself)。
実データをドロップダウンにロードする
ティムはLoadListData()を作成し、GetPerson_All()を使用してavailableTeamMembersを入力します。 選択されたチームメンバーリストは空のままであり、新しいチームは空から始まるため正しいです。
これはデータベースやテキストファイルのような実際のデータソースにUIをどのように接続するかを示しています。
メンバー追加ボタンを結ぶ
ティムは追加ボタンのイベントハンドラを作成します。 ロジックは次のとおりです。
ドロップダウンから選択された人物を取得
彼らを利用可能なリストから削除
彼らを選択されたリストに追加
- UIをリフレッシュ
ティムは、コンボボックスがオブジェクトをobjectとして保存するため、選択されたアイテムをPersonModelにキャストする必要があると説明します。 これはC#における型キャストとオブジェクトの処理の重要性を強調しています。
リフレッシュ問題のデバッグ
ティムはアイテムを移動した後にUIがリフレッシュしないことを発見します。 デバッグ後、彼は解決策を見つけます。
DataSourceをnullに設定
- その後リストを再割り当て
これによりコンボボックスとリストボックスがリフレッシュされます。 ティムは、デバッギングスキルがどのようにデータバインディングが振る舞うかを理解する上で重要であると強調します。
選択されたボタンを削除するための結びつけ
ティムはボタンの名前を"選択を削除"に変更し、イベントハンドラを作成します。 これは追加操作を逆にします。
選択されたチームメンバーから削除
利用可能なチームメンバーに戻す
- UIをリフレッシュ
ティムはバグを発見します:アイテムが選択されていない場合、null値が追加されます。 彼は検証を追加します。
if (p != null)
{
// 続行
}これは基本的な検証とエラー防止を示しています。
テストの重要性
ティムはユーザーのようにアプリケーションをテストし、破壊しようとすることの重要性を強調します。 彼は、テスターが意図的にアプリを破壊しようとすることを勧めています。なぜなら、実際のユーザーは予期しないアクションをとるからです。
これは信頼性のあるソフトウェアを構築するための重要な教訓です。
"メンバー作成"ボタンを結びます
ティムは"メンバー作成"ボタンを修正し、新しい人物をデータストアに保存し、選択されたリストに即座に追加します。これはWindows FormsアプリケーションでCRUD操作を実装する方法を示しています。
テキストファイルのGetPerson_Allを実装する
ティムはテキストファイルのGetPerson_Allバージョンが欠けていることに気づきます。 彼はシンプルな行を使用してそれを実装します。
return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();これはファイルベースのストレージが複雑なロジックを使わずに簡単に実装できることを示しています。
すべてが正しく動作することを確認する
ティムはアプリを実行し、ドロップダウンが現在テキストファイルとデータベースから人々をロードすることを確認します。 彼は新しい人物を追加し、それらが即座に現れることを確認し、システム全体が正しく機能していることを示します。
次は何?
ティムは次のビデオがチームそのものを作成することに焦点を当てると述べて結論付けます。 これはデータベースまたはテキストファイルに複数のデータを保存し、機能を完了させることを含みます。
最終的な考え
Tim Coreyのレッスン13は実際のC# Windows Formsアプリケーション開発の実例です。 UIコントロールの結びつけとデータバインディングからデバッグと検証まで、ティムは本物のデスクトップアプリケーションを構築するための実用的なプログラミングスキルを教えます。 このレッスンはデータバインディング、Dapper、SQL CRUD操作、およびC#でのUI駆動プログラミングを学びたい開発者に特に価値があります。
学び続けたい場合、ティムの次のレッスンではチーム作成機能を完成させ、すべてを一つの働くアプリケーションにまとめます。

