Skip to content

caf112/propro-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PRO×PRO

ゲーム感覚でプログラミングを学ぼう! 回答をブラウザで表示できるよ。

機能

Githubを登録して記録できる

ユーザー登録時にリポジトリを登録してプレイ後に記録できる。

一人モード

対戦モード

言語

  • HTML
  • CSS
  • JavaScript

ツール

  • React
  • Material-UI(MUI)
    • おすすめのUIライブラリ教えてください
  • AWS
    • AWS Amplify
    • AWS LambdaもしくはAWS DynamoDB
  • VSCode

ディレクトリ構成

common

共通

constants

グローバルで参照される定数を定義したファイルを配置しています。

lib

使用しているライブラリ固有のコードで、初期化や設定のコードなど、データ取得に絡まないコードはここに配置します。 ライブラリ毎にまるっと切り替わる可能性があるので、ライブラリごとにディレクトリを分けています。

utils

グローバルで使える便利な関数(ex.文字列の加工など)を配置しています。

datas

出題する問題を格納しています。

models

ここは人によってはentities、types、interfaces等、様々な名付け方をしそうですが、自分はmodels、entitiesの二択でmodelsにしました。好きな名前にするといいと思います。 modelごとにファイルを分けています。 また、servicesで加工したデータと、repositoriesで取得したデータの区別が付きやすいように、 servicesで生成するオブジェクトについては、モデル名にXXXDataのようなサフィックスをつけるようにしています。

レイヤードアーキテクチャでいうDomain層、MVCでいうModelを担っています。

repositories

DBやSaaSにアクセスする層になります。 データを取得して、データマッピングに従い、オブジェクト化する責務を持たせます。 一つのテーブルに対して、一つのファイルにしていけば良さそうだと思っています。 使用しているDBやSaaSに依存したコードはここに配置します。 使用しているDBやSaaSが変更されたときは、ここを変更するだけで対応できるようにしています!と、言いたいところではありますが、 使用している基盤技術をごっそり変える時、例えばREST APIからGraphQLに移行するといった場合では、servicesの関数も変更する必要が出てくると思っています。

レイヤードアーキテクチャでいうInfrastructure層を担っています。

services

ユーザーのアクションに応じて、データの加工(結合や集計など)を行うコードを置いておきます。 加工元となるデータ取得は、repositories配下の関数を呼び出すことにより行っています。 ユーザーの1アクションに対して、1つのサービス関数を作るイメージでいます。 ここも、componentsと同様に、おおまかなアクションの区切りでディレクトリを分けています。

レイヤードアーキテクチャでいうApplication層を担っています。

views

viewsを格納しています。

components

全ページ共有、ページ固有のコンポーネントを分けます。 こうすることで、再利用するものと再利用しないものを分けます。 ページ固有のコンポーネントは実は複数ページで使える可能性もあるので、ディレクトリはきっちり分けずに、ユーザーのおおまかなアクションの区切りで数個のディレクトリに分けています。

レイヤードアーキテクチャでいうUI層、MVCでいうViewを担っています。

pages

Next.js固有のディレクトリです。 MVCでいうコントローラ的位置づけで、ユーザーからのリクエストを受け取って、getServerSidePropsやgetStaticPropsを用いながらservicesの関数を呼び出してレスポンスを返すコードを書きます。 jsxを書けるので、ここに直接jsxを書いてもいいのですが、見た目部分は分けたかったので、大部分はcomponentsで定義し、pages配下ではcomponentsで定義されたコンポーネントを呼び出して、jsxを組み立てるという構成にしています。

レイヤードアーキテクチャでいうUI層とApplication層の紐付け、MVCでいうControllerを担っています。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published