[Project]開発開始構造
6606 ワード
📁 Express 3層設計[3層アーキテクチャ]作成構造
デザインとは?
コードは数百行(または数千行)あるので、変更するコードがある場合は見つけにくいです.これはメンテナンスの難しさを増します.
コードとコード(関数と関数の間など)の関係を一目で見るのは難しい.
各コード(関数,オブジェクトなど)の役割と機能を明確に区別していないため,機能別のテスト(ユニットテスト)は困難である.
1つのファイルを同時に複数人で修正することは困難であるため、パーティション化が困難である.
新しい機能を追加したい場合は、既存のコードの変更または再作成が必要な部分を特定するのは難しいです.これは、コードが拡張性に欠けていることを意味します.
三層構造設計とは、三層に分けて設計することである.
制御レイヤ(コントローラ):ユーザーのリクエストを分析し、リクエストを適切なサービスに転送し、サービス結果に再応答するレイヤ.
Routingレイヤ.
expressの場合、req.params(), req.body()、res.status()、res.send()などのコードが作成されます.
サービス層(Service Layer):コントローラから送信された要求に論理を適用する層.
論理、たとえば、ログイン・サービスの場合:
if-elseなどの次のコードで、次の論理を実現できます.
≪モデル・レイヤ(データ)|Model Layer(Data)|oem_src≫:サービス・レイヤからデータベースにアクセスする必要がある場合があります.データに関連するコードが作成されます.Mongooseについては、モデルです.find({})などのコードが作成されます.
ログインサービスが一例である場合は、要求されたIDがデータベースに存在することを確認し、存在する場合は、データベースに格納されたパスワードが要求された(ユーザが入力した)パスワードと一致する必要があります.
サービス・レイヤは、データ・レイヤにデータベース検証要求を発行します.
コードをロールごとに分離し、各レイヤで実装する場合、次の利点があります.
各ロールは開発タスクを分担することができ、分業を簡素化します.
役割による開発タスクの割り当てではなくMVPによる開発タスクであっても、各MVPがどのようなプロセスで実現されるか(
Controller
でユーザの要求を受信し、要求に対してService
層で論理を実施し、必要に応じてデータベースにアクセスし、結果としてController
で応答する)、コード構造が容易に理解できるようになる.ルーティング関連コードは
Controller
フォルダにあり、サービスロジック関連コードはService
フォルダにあり、データ関連コードはModel
フォルダにあり、必要なコードを迅速に検索することができ、メンテナンスを簡素化することができる.Webサービスの実施形態を変更する場合、たとえば、データベースを
Mongodb
からMysql
に変更すると、各フォルダには独立した役割があります.したがって、Model
フォルダコードを変更するだけで、残りのController
フォルダとService
フォルダを変更する必要はありません.メンテナンスが容易です.コードは機能別に区分されているので、機能別のテスト(ユニットテスト)を容易に行うことができる.
└───src
├───db # Model layer
│ ├───models
│ └───schemas
├───middlewares
├───routers # Control layer
└───services # Service layer
💻 賞履歴[Award]部分DB設計を行う
当初の設計では、User DBに賞履歴を載せる方式で行われていましたが、賞管理を行う際には、同時にUser DB部分を見る必要があるという点で不便なので、User ModelとAward Modelを分けてAwardモデルでUserModelを参照して行いました.
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const model = mongoose.model;
const AwardSchema = new Schema({
id: {
type: String,
unique: true,
required: true,
},
title: {
type: String,
required: true,
},
description: String,
author: {
type: Schema.Types.ObjectId,
ref: "User",
required: true,
},
});
const AwardModel = model("Award", AwardSchema);
export { AwardSchema, AwardModel };
また、Awardモデルのように、教育[学歴部分API]のモデルも設定しました.💾 CommitメッセージでGitLabイベントを閉じる
Gitlabホットスポットを生成する場合、ホットスポット番号が指定されます.Commitを実行するときに、特定のコマンドとホットスポット番号を使用して、Commitを実行するときにホットスポットを自動的に閉じることができます.
イベント番号が#79の場合、
"close #79"
または"fix #79"
と入力すると、コミットは自動的にイベントを閉じます.他の方法で閉じるか追加する場合は、
config/gitlab.yml
のissue_closing_pattern
で指定できます.📒 に感銘を与える
DBデザインは頭の中で思いついたことから始まり、結局DBを見直すことになった.
最初からDBデザインを作成して、やるべきことを事前に考えておけば、修正することを解消したり減らしたりできるので、次回は必ず計画通りに設計して、それから案を立てましょう.
そして作成、提出、統合した後、私は直接この話題を閉じましたが、GitLabが書いたこの話題がcommitで自動的に閉じることができることを知っていたので、私が使っているツールの機能を改めて感じました.
最初の三層構造設計に従ってフォルダを区切って、それからコードを書いて、ここで書いて、そこで書いて、最初は混乱して、疲れましたが、適応してから、編集したい部分は修正すればいいと思います.これはいつもの場所で書くよりずっと便利です.
後で他のプロジェクトを行う場合も、他の構造を使ってみましょう.
Reference
この問題について([Project]開発開始構造), 我々は、より多くの情報をここで見つけました https://velog.io/@soshin_dev/Project-개발-진행-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol