「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ハクトーバーフェストウィーク オンラインオークションシステム

ハクトーバーフェストウィーク オンラインオークションシステム

2024 年 11 月 6 日に公開
ブラウズ:617

Hacktoberfest week Online Auction System

概要

ハクトーバーフェストの第 3 週中に、私は小規模だが有望なプロジェクトであるオンライン オークション システムに貢献することにしました。このプロジェクトはまだ初期段階にありますが、すでに成長の可能性を示しており、コードベースの改善を支援する機会があると考えました。私の仕事は、冗長なコードを削減し、全体の構造を改善して、プロジェクトをより保守しやすく、スケーラブルにすることでプロジェクトをリファクタリングすることでした。

私の課題

私のタスクの主な目的は、反復的なコード パターンを特定し、それらをリファクタリングして、コードベースをよりクリーンで保守しやすくすることでした。コードの冗長性は不整合を引き起こし、将来の更新を困難にし、バグの可能性を高める可能性があります。コードを合理化することで、機能を変えることなく効率を向上させることを目指しました。

主な変更点:

1.一元化された非同期エラー処理: Express.js プロジェクトでよくある問題の 1 つは、非同期ルートでのエラーを処理するための try-catch ブロックの繰り返しです。これに対処するために、すべての非同期関数をラップする asyncHandler というユーティリティ関数を導入しました。これにより、エラーが自動的に捕捉され、アプリ全体で一貫して処理されるようになります。

// utils/asyncHandler.js
const asyncHandler = (fn, errorMessage = "Internal server error") => (req, res, next) =>
  Promise.resolve(fn(req, res, next)).catch((error) => {
    console.error(`Error: ${error.message}`);
    res.status(500).json({ error: errorMessage });
  });

module.exports = asyncHandler;

この変更により、冗長な try-catch ブロックが削除されただけでなく、コードがよりクリーンになり、エラー処理ではなくビジネス ロジックに重点が置かれたようになりました。

2.データベース ユーティリティ関数: プロジェクトには、データベースと直接対話するルートがいくつかあり、多くの場合、同様のクエリを繰り返していました。冗長性を減らすために、購入者の情報の取得やトランザクションの取得など、一般的なデータベース クエリを処理するための再利用可能なユーティリティ関数のセットを作成しました。

// utils/dbUtils.js
const getBuyerById = async (buyerId) => {
  const query = "SELECT * FROM Buyers WHERE Buyer_ID = $1";
  const { rows } = await pool.query(query, [buyerId]);
  return rows.length > 0 ? rows[0] : null;
};

const getTransactionsByBuyerId = async (buyerId) => {
  const query = "SELECT * FROM Transactions WHERE Buyer_ID = $1";
  const { rows } = await pool.query(query, [buyerId]);
  return rows;
};

module.exports = { getBuyerById, getTransactionsByBuyerId };

各ルートに SQL クエリを直接記述する代わりに、コードベースがこれらのユーティリティ関数に依存できるようになり、重複が減り、ロジックの管理が容易になります。

3.統合応答処理: もう 1 つの改善点は応答処理です。異なるルートでは、成功応答とエラー応答の送信パターンに一貫性がありませんでした。これを標準化するために、send404、send500、sendSuccess などのユーティリティ関数を導入しました。

議論

プロジェクトはまだ初期段階にあるため、簡単に作成できる POST、DELETE、PUT などのルートがいくつか欠落していることに気づきました。しかし、私は自分の問題にのみ固執することにしました。

コメントで教えてください。もっと貢献できるこの種の状況に通常どのように対処していますか...新しい問題を開きますか、単に作成してプルリクエストを実行しますか?ぜひあなたの体験談を読みたいです。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/htsagara/hacktoberfest-week-3-online-auction-system-4knp?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3