MENU

基本設計

この記事のアイキャッチ画像は、vilius.kukanauskasさんが作成されたもので、pixabayで配布されています。とてもこの画像好きです。

目次

背景

練習用Webアプリの作成で、システム設計を行っています。「そもそもシステム設計ってどうやってやるのか」から始まったのですが、ネットで調べたところよくわかりませんでした。いくつかのページを読んで思ったことは、今の自分の知識とページに記載されている情報量のギャップです。

例えば、僕はインフラ側のことが全くわからないのですが、そんな僕がインフラ側の要件を考えろ、と言われても手も足もでません。そういった箇所が多くあり、途方に暮れてしまいました。

しかし、途方に暮れていてもしょうがないので、ひとまずわかる範囲で作り、あとから書き足していくことにしました。そこで、今回は基本設計について、自分の理解の範囲でまとめようと思います。

調査結果

参考文献は以下になります。

  1. geeksforgeeks, “What is the goal of High-Level Design(HLD)?
  2. geeksforgeeks, “Vending Machine: High Level System Design

基本設計の目的

参考文献1, 拙訳

基本設計の目的は、システムの構造、要素、やりとりの詳細な概要を示し、プロジェクトの詳細なデザインや実装フェーズの方向性を設定することです。

参考文献1では、上記のように定義し、さらに以下の7個の項目に分けて定義しています。

  1. システムの把握
  2. 要素の識別
  3. インターフェースの設計
  4. 技術の選択
  5. 拡張性とパフォーマンス
  6. リスク緩和
  7. 要件の調整

それぞれの説明を以下に示します。但し、内容は参考文献1の引用です。

システムの把握

基本設計の最も重要な目的は、開発者、設計者、システムマネージャーを含んだstakeholderがシステム全体のArchitectureと設計を明白にすることです。

要素の識別

基本設計は、システムの主要な要素・モジュールの識別とその役割 及び 責務の識別を目標とします。それによって、システムを扱いやすいいくつかの部品へと整理することができ、設計や実装、メンテナンスを簡単にすることができます。

インターフェースの仕様書

基本設計では、システムの様々な要素間のインターフェースを定義します。これは、要素間でのデータのやり取りを明らかにすることを含み、その際に用いるプロトコルといった、いかなる要件も含みます。

技術の選択

基本設計では、システムを実装するために用いる技術やフレームワーク、そしてツールの概略を示します。これは、プログラミング言語やデータベース、ミドルウェア、そして、その他のソフトウェアやハードウェアの要素を含みます。

拡張性と性能

基本設計では、システムの拡張性や性能要件を示します。これは、潜在的なボトルネックや性能の課題、そして、それらの課題に対処するための戦略の概要を示します。(例, キャッシュやロードバランス、データベースの最適化)

リスク緩和

基本設計は、設計における潜在的なリスクや課題、システムの実装を識別します。これは、技術やリソース、スケジュール、そしてその他の要因のリスクを含みます。基本設計では、それらのリスクの緩和策を示します。(例, 証明された技術、テストの実施、臨時の対策)

要件との整合性

最後に、基本設計では、要件やプロジェクトの目的とシステムの整合性を確実にします。ここでは、機能・非機能要件を設計が満たしているかを確実にします。(例, 使いやすさ、セキュリティ、コンプライアンス)

成果物

練習用Webアプリの作成で作成した基本設計の初版です。ファイルが見やすい方はダウンロードからご確認ください。

システム要件

1. カレンダーを用いて予定(例, 試合日程)を共有することができる。
2. チーム内での連絡を行うことができる

連絡形式は、掲示板を想像しており、書き込みに対して自由にコメントすることができ、それを他のユーザーが閲覧することができる。さらに、画面を更新する手間を省くため、コメントはリアルタイムで更新されるものとする

3. アプリを使用するユーザーを管理することができる

使用する言語・フレームワーク

  • C# 10
  • .NET 6.0
  • ASPNetCore.MVC 6.0

システムの構成

本システムのデザインパターンはModel – View – Controller パターン(以降、MVCパターン)を採用する(下図)。

/

  1. スケジュール
    1. 1カ月の予定をカレンダー形式で表示する
    2. 1日の予定を24時間形式で表示する
  2. 予定
    1. 予定を作成する
    2. 予定を表示する
    3. 予定を編集する
    4. 予定を削除する
  3. 掲示板
    以下の機能を、ユーザーの種類がコーチのユーザーにのみ、行えるようにする。
    1. 掲示板を作成する
    2. 掲示板を表示する
    3. 掲示板を編集する
    4. 掲示板を削除する
  4. 書き込み
    1. 掲示板を指定して書き込みを作成する
    2. 書き込みを表示する
    3. 書き込みを編集する
    4. 書きこみを削除する
  5. コメント
    1. 書き込みを指定してコメントを作成する
    2. コメントを表示する
    3. コメントを編集する
    4. コメントを削除する
  6. ユーザー
    1. ユーザー権限を指定してユーザーを作成する
    2. ユーザーを表示する
    3. ユーザーを編集する
    4. ユーザーを削除する

また、コメントの送信方法については、リアルタイムで更新する機能を実装するため、ASP.NETを利用する開発者に向けたパッケージ、signalRを利用する。signalRでは、通信規約にWebSocketを使用し、Client – Server間のメソッドの呼び出しにパイプライン (Hub) を利用する。また、送信先のユーザーの指定には、いくつか方法があるが、Claimを用いる方法を採用する。

画面フロー

まとめ

基本設計とは、詳細設計前に、方向性を定めるためのものです。そのため、基本設計には、用いる言語やフレームワーク、デザインパターン、関係する要素(パッケージ ~ オブジェクト)を示す必要があります。

僕のインフラ側の知識が不足しているため、そのあたりの記述は今回ありませんが、本来は必要になります。

用語

stakeholder

仕事や組織、プロジェクトの活動と意思決定において、私利的に関与する個人や組織のこと

TechTarget, “What is a stakeholder?

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次