アプリデータを設計する(レッスン 03)— Tim Corey と共に深く掘り下げる
"C#アプリ開始から完了まで"コースの第3レッスンで、ティム・コーリーはデータ設計の重要なステップを紹介します。 ユーザーインターフェースを作成したり、コードを書き始めたりする前に、まずアプリケーションが使用するデータの構造を定義する必要があると説明します。
この記事では、ティム氏のトーナメントトラッカーアプリケーションのデータを設計するアプローチをビデオの正確な説明と例に従って探ります。 アプリ設計のトピックをより深く見ていきます。ティムのビデオを使って、なぜデータ設計が重要なのか、そしてそれがアプリ全体にどのように影響を与えるのかを理解します。
なぜデータが最初に来るのか
ティムは、アプリケーションの要件と構造を既に確立してあると私たちにリマインドしながらレッスンを始めます。 今、それに基づいて実際のデータ構造を構築する時です。 彼は、一部の開発者はUIを先に設計することを好むが、最も成功するのはデータを先に設計することで得られると考えています。
彼の理由付けを次のように説明しています:
"あなたのアプリケーションはデータなしでは存在しない。" アプリは基本的にはデータを表示、操作、変更、保存するための手段であると明確にします。
彼はこの点を証明するために例を挙げています。 Microsoft Wordのようなテキストエディタであっても、データ(テキスト自体、フォーマット、スペース等)を中心に構築されています。ティム氏はこれをさらに進めて、ゲームでさえデータに基づいていることを示しています。 例えば、チェスゲームは単にピース、ポジション、動きの集合であり、すべてがデータです。 一人称シューティングゲームもまた、キャラクターの位置、弾丸の速度、ヒット判定、ダメージ値、勝利条件などのデータに大きく依存しています。
彼の結論は明確です:
"すべてがデータを中心に回る。"
だからデータ設計から始めるのです。データがわかれば、UIの構築がより簡単になります。 さもなければ、方向性のない白紙から設計を始めることになります。 このアプローチは、ビジュアルスイート、ポスターメーカー、ロゴメーカーのようなツールで作業している開発者やデザイナーに役立ちます。これらのアプリもテンプレートやフォント、画像要素を作成するために構造化されたデータに依存しています。
コーディング前の計画
ティムは自分の好む計画方法を説明します: 彼はすべてを紙やホワイトボードに描くことを好みます。変更や調整が簡単だからです。
まだVisual Studioを開かないことを強く推奨しており、計画はコードの外で行うべきであると強調しています。 彼はノートやリーガルパッドで計画することが重要であると述べています。コードに固執せず、物を消したり変更したりすることが簡単だからです。
ティムは彼の設計の整理されたバージョンを示し、それを一歩ずつ説明しています。彼の最初のルールは:
"とりあえず何かを書き留めること。"
彼は最も明白なオブジェクト:チームから始めます。
チームオブジェクトの構築
ティムは、チームが何を必要とするかを紙に書き始めます。 彼は2つの主要なプロパティを特定します:
1. チームメンバー
彼は、チームは人を必要とするため、人のリストを書き留めます:
"チームには人が必要であることを知っています。"
彼は人オブジェクトをまだ構築する必要がないと説明しています。 代わりに、まずはチームに焦点を当て、後で人を作成することをメモに書きます。 これにより、設計が集中され、主要なオブジェクトを見失わないようにします。
2. チーム名
次に、ティムはチーム名を文字列として追加します。
彼は、チームクラスはシンプルであり、いくつかの主要なプロパティしか必要としないと説明しています。 彼は、チーム名は"ティム・ボブ・マリス・ス・アル"や"卓球トーナメント"のように記憶に残るものであるべきであり、それはロゴやブランド、会社名が使われるのと同様にブランディングと識別を助けます。
人オブジェクトの設計
次に、ティムは人クラスを設計します。 彼は、名前を姓と名に分けることの重要性を説明します。
なぜ姓と名を分けるのか?
ティムは業界でのベストプラクティスであり、メールでファーストネームで誰かを呼ぶなどの個別化に役立つと述べています。
彼はまた、名前の分割問題について警告しています:
"Van Wilder"は"Wilder"ではない
- "Mary Sue"は"Mary"ではない
したがって、ティムは入力段階で姓と名を分けるべきであり、後で分割しないように強調しています。
その他のプロパティ
ティムはさらにフィールドを追加します:
メールアドレス(文字列)
- 携帯電話番号(文字列)
彼は携帯電話番号を文字列として保存すべきであると強調しています。計算や操作のためではないからです。 括弧やダッシュのようなフォーマットを含む場合があります。
ティムは、プロパティという言葉を使用するのは、これらがC#でクラスプロパティになるからだと説明します。
トーナメントオブジェクト
ティムは、最も重要なオブジェクト:トーナメントを紹介します。
彼は、このアプリケーションがトーナメントトラッカーであるため、トーナメントが中心的なデータハブであると説明します。
トーナメントのプロパティ
ティムはトーナメントに必要なものをリストアップします:
トーナメント名 たとえ要件になくても、同時に複数のトーナメントが存在するため追加します。 名前はそれらを区別するのに役立ちます。
参加費 ティムは、参加費が管理者にチーム参加時に課金することを可能にすることを説明します。 彼は参加費はお金なので、floatではなくdecimalとして保存する必要があると強調しています。
登録チーム トーナメントに登録しているチームのリスト。
賞品 賞品のリスト、これは0以上かもしれません。
ラウンド これは複雑です。 ティムは、各ラウンドが組み合わせを含むため、構造がリストのリストになると説明します:
ラウンド1:組み合わせのリスト
ラウンド2:組み合わせのリスト
- ラウンド3:組み合わせのリスト したがって、ラウンド = List
ティムは、この時点で賞品オブジェクトと組み合わせオブジェクトはまだ作成されていませんが、後で開発されるとうまくいくと述べています。
自然キーと欠けているデータ
ティムは、計画中にいくつかのデータを見逃すことがあると警告しています。 彼は自然キーについて話し、一部の開発者がそれを識別子として使用することを紹介します。 例えば、トーナメント名は一意であり、識別子として機能することができます。
しかし、ティムはカスタムIDプロパティを使用することを好みます:
"私は自分で作成してIDと呼ぶのが好きです。"
彼は、インデックス作成と管理が容易であると述べています。
彼はまた、私たちに思い出させます:
"ものを見逃しても大丈夫です。"
彼は研究を行い、Amazonのサインアップや電話の連絡先などの例を見て、人に関して通常収集される情報を確認するよう奨励しています。
しかし、彼はそれを考えすぎないように警告しています—ミスは起こり、それは後で修正することができます。
オーバープランしない
ティムは重要なバランスを強調します:
"リーガルパッドにまだある計画済みアプリケーションは役に立たない。"
彼は計画が必要ではあるが、計画に時間をかけすぎることは、アプリケーションを実際に構築することを阻む可能性があると説明しています。 彼は前進することを奨励し、設計が進化することを受け入れます。
賞品オブジェクト
ティムは賞品オブジェクトとそのプロパティを紹介します:
順位番号 (int) 例: 1は1位、2は2位。
順位名 (string) 例: "チャンピオン"、"準優勝"。
賞金額 (decimal) その場所の金額。
- 賞金割合 (double) 例: 0.5は50%
彼はシステムが、その金額または割合のどちらを使用するかをどのようにして決定するかを説明しています。
組み合わせオブジェクト
ティムは組み合わせオブジェクトを紹介します:
条目: MatchupEntryのリスト
勝者: チーム
- ラウンド番号: int
彼は組み合わせエントリーがマッチアップの一つのチームを表していると説明します。
組み合わせエントリーオブジェクト
ティムはMatchupEntryのプロパティを説明します:
チーム
スコア
- 親組み合わせ
彼がなぜ、別々のチームプロパティの代わりにエントリーリストを選んだのか説明します。 これは、スコア順にエントリーを並べられるなど、柔軟性を提供します。
彼はまた親組み合わせの目的を説明しています: それは1ラウンドの勝者が次のラウンドに進むためにリンクします。
結論 - データプランが完了
ティムは、この6つのクラス (チーム、人、トーナメント、賞品、組み合わせ、MatchupEntry) がアプリケーションの基盤であることを結論付けました。 データプランが完成したことと、次のレッスンではユーザーインターフェースの構築に焦点を当てることを思い出させてくれます。
このデザインは混乱を招くかもしれませんが、コードで実装されると明確になると述べて終わります。
Timのデータファーストアプローチのビデオに従うことで、トーナメントトラッカーアプリのコアデータをどのように構築するかについての明確な理解が得られました。 次のステップは、このデータに基づいてUIを構築することであり、それをTimがレッスン4でカバーします。

