」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > [Roast:Day - 我的「utils」資料夾

[Roast:Day - 我的「utils」資料夾

發佈於2024-08-27
瀏覽:539

[Roast: Day  - My `utils` Folder

今天的大部分工作都是昨天工作的延续,只是在我的应用程序的路径上实现业务逻辑。因此,我想我应该在撰写此内容时休息一下,谈谈我创建的三个函数,这些函数是为了在我的应用程序中执行非常具体的事情。

什么是 utils 文件夹?

这是您放置所有很难找到家的小功能的目录,但您的应用程序没有它们就无法生存。

utils 文件夹是许多应用程序中无名英雄的垃圾场。

当您必须执行数据转换而需要多行代码且必须重复使用时,最好将其放入自己的文件中,您可以将其导出到您的申请的其余部分。

为什么我们不直接复制粘贴呢?好吧,这违反了两个编程原则:DRY 和关注点分离。

不要重复自己

重复自己不仅单调,而且如果你在整个申请过程中做得足够多,那么也很难改变。想象一个计算今天下雨的百分比的算法。

我不知道人们是如何做到这一点的,所以我无法向您展示一个例子。但是,如果您将这些内容复制到需要访问此计算的不同位置的整个代码中,那么当非常智能科学天气委员会带着新的、更准确的算法回来时,您会感到非常沮丧。 &&&]

获取代码中重复使用的部分,并找到方法将它们打包以便在多个地方使用,同时仍然在一个地方进行更新。

我的 utils 文件夹中的所有函数都在我的应用程序的许多地方使用!

关注点分离

作为程序员,我们也不想创建做很多不同事情的函数。我们宁愿有很多功能都只做一件事。为什么?嗯,它使这些函数更加可重用!

这与 utils 文件夹有什么关系?好吧,我要介绍的函数在 getRoastsById 这样的函数中并没有真正的位置,因为这不是它们所做的!当我们需要做其他事情时,我们应该为其创建一个函数。但是,当我们没有该函数的逻辑位置时,因为它是一个“助手”,我们将它放在我们的 utils 目录中!

我的 utils 文件夹

到目前为止我有三个自定义实用程序:

    插入语句
  • 更新语句
  • objectKeysToCamel
希望通过他们的名字就可以清楚地了解他们的工作,但让我简要分享一下他们解决的问题以及他们的工作方式。

插入语句

问题: 在我的应用程序的许多不同服务中,我将需要对我的数据库执行 INSERT 查询。这些语句要求您明确列出 1) 列的名称和 2) 值。我不必在每条路线中输入这些内容,因此我创建了一个函数来为我执行此操作。

输入: 该函数采用两个参数,table 是与数据库中表名称匹配的字符串,obj 是一个 Javascript 对象,表示用户想要添加到数据库的模型。

输出: 一个对象,其中包含 1) 具有占位符值的属性格式化 INSERT 字符串和 2) 要在参数化查询中使用的值的数组。

const { SnakeCase } = require('change-case-commonjs'); 函数 insertStatement(表, obj) { const 键 = Object.keys(obj); const 值 = Object.values(obj); let 语句 = `INSERT INTO ${table} (`; // 将snake_case键添加到语句中 const keyString = keys.map((key, i) => SnakeCase(key)).join(', '); 语句 = `${keyString}) VALUES (`; // 为值添加占位符 const 占位符 =keys.map((_, i) => `$${i 1}`).join(', '); 语句 = `${占位符}) 返回 *;`; // 返回查询字符串和值数组 返回 { 文本:声明, 价值观:价值观 }; } module.exports = insertStatement;
const { snakeCase } = require('change-case-commonjs');

function insertStatement(table, obj) {
  const keys = Object.keys(obj);
  const values = Object.values(obj);

  let statement = `INSERT INTO ${table} (`;

  // Add snake_case keys to the statement
  const keyString = keys.map((key, i) => snakeCase(key)).join(', ');
  statement  = `${keyString}) VALUES (`;

  // Add placeholders for the values
  const placeholders = keys.map((_, i) => `$${i   1}`).join(', ');
  statement  = `${placeholders}) RETURNING *;`;

  // Return the query string and the values array
  return {
    text: statement,
    values: values
  };
}

module.exports = insertStatement;
更新语句

问题: 与 INSERT 语句类似,UPDATE 语句要求您在查询中明确说明列名和值。此语法与 INSERT 语句不同。通过条件逻辑,我可以创建一个databaseQueryGenerator函数,但这似乎也违反了关注点分离。像这样的函数会决定你想要什么样的查询,或者基于它生成语法吗?

输入: 该函数采用三个参数。 obj,表示更新记录的 JavaScript 对象。 table ,一个应与数据库中的表匹配的字符串。 id ,一个与要使用新信息更新的记录匹配的整数。

输出: 一个对象,具有 1) 具有占位符值的属性格式化 UPDATE 字符串和 2) 要在参数化查询中使用的值的数组。

const { SnakeCase } = require('change-case-commonjs'); 函数 updateStatement(obj, 表, id) { const 键 = Object.keys(obj); const 值 = Object.values(obj); let 语句 = `UPDATE ${table} SET `; key.forEach((键, 索引) => { 语句 = `${snakeCase(key)} = $${index 1}, `; }); // 删除最后一个逗号和空格 语句 = 语句.slice(0, -2); // 根据表确定正确的ID列 const idColumn = 表 === '用户' ? '用户名' : 表 === '烤肉' ? '烤_id':''; // 使用 WHERE 子句完成语句 语句 = ` WHERE ${idColumn} = $${keys.length 1} RETURNING *;`; 返回 { 文本:声明, 值:[...值,id] }; } module.exports = updateStatement
const { snakeCase } = require('change-case-commonjs');

function insertStatement(table, obj) {
  const keys = Object.keys(obj);
  const values = Object.values(obj);

  let statement = `INSERT INTO ${table} (`;

  // Add snake_case keys to the statement
  const keyString = keys.map((key, i) => snakeCase(key)).join(', ');
  statement  = `${keyString}) VALUES (`;

  // Add placeholders for the values
  const placeholders = keys.map((_, i) => `$${i   1}`).join(', ');
  statement  = `${placeholders}) RETURNING *;`;

  // Return the query string and the values array
  return {
    text: statement,
    values: values
  };
}

module.exports = insertStatement;
对象键到骆驼

问题:我的数据库风格与我的JavaScript风格不同。然而,我不愿意在这两个方面做出妥协。在我的 JS 文件中,我的命名约定使用camelCase,而在我的数据库中它使用snake_case。返回对象的所有属性名称都相同,但格式不同。为了维持这种情况标准,我必须使用 Snake_case 访问 JS 中的属性,但我不喜欢这样。

输入: 该函数仅接受一个参数,即一个 obj JavaScript 对象,该对象的键应转换为驼峰格式。

输出: 相同的对象,具有驼峰格式的键。

const { 驼峰命名法 } = require('change-case-commonjs'); 函数 objectKeysToCamel(obj) { // 提取键和值 const 键 = Object.keys(obj); const 值 = Object.values(obj); 让骆驼= {} // 更改每个键的格式,为其分配正确的值 键.forEach((键, i) => { const CamelKey = 驼峰命名法(key); 骆驼[camelKey] = 值[i] }) // 返回新对象 返回骆驼; } module.exports = objectKeysToCamel;
const { camelCase } = require('change-case-commonjs');

function objectKeysToCamel(obj) {
  // Extract the keys and values
  const keys = Object.keys(obj);
  const values = Object.values(obj);
  let camel = {}

  // Change the formatting of each key, assigning it the proper value
  keys.forEach((key, i) => {
    const camelKey = camelCase(key);
    camel[camelKey] = values[i]
  })

  // Return the new object
  return camel;
}

module.exports = objectKeysToCamel;

查看项目

如果您想跟上更改、fork 并在本地运行,甚至建议更改代码,这里有一个 GitHub 存储库的链接!

https://github.com/nmiller15/roast

前端应用程序目前部署在 Netlify 上!如果您想尝试一些功能并查看其实际效果,请在下面的移动设备上查看。

https://knowyourhomeroast.netlify.app

注意:此部署没有后端 api,因此帐户和烘焙实际上不会在会话之间的任何位置保存。

版本聲明 本文轉載於:https://dev.to/nmiller15/roast-day-16-my-utils-folder-33dm?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何解決 MySQL C# 中的文字編碼問題?
    如何解決 MySQL C# 中的文字編碼問題?
    修復MySQL C# 中的文字編碼問題使用實體框架在C# 中處理MySQL 資料庫時,使用者可能會遇到文字編碼問題,特別是帶有特殊字符,例如“ë”,渲染不正確。本文探討了解決此常見問題的最合適的解決方案。 要修正編碼問題,必須執行以下操作:驗證排序規則設定: 確保所涉及的資料庫或表的排序規則與UTF...
    程式設計 發佈於2024-11-06
  • 如何將美麗搜尋與 Node.js 集成
    如何將美麗搜尋與 Node.js 集成
    作為 Node.js 開發人員,建立能夠提供快速且準確的搜尋結果的應用程式非常重要。使用者期望立即得到相關的回應,但實現起來可能具有挑戰性,特別是在處理大型資料集時。 這就是美麗搜尋的用武之地——一個為輕鬆滿足這些需求而構建的搜尋引擎。 什麼是美麗搜尋? Meilisearch ...
    程式設計 發佈於2024-11-06
  • 平行 JavaScript 機
    平行 JavaScript 機
    作者:Vladas Saulis,PE Prodata,克萊佩達,立陶宛 2024 年 5 月 18 日 抽象的 本文提出了一種新的程式設計模型,可以以簡單且自動平衡的方式利用多核心 CPU 系統。該模型還提出了一種更簡單的程式設計範例,用於在大多數大規模平行計算領域(例如天氣預報、核子物理、搜尋引...
    程式設計 發佈於2024-11-06
  • 推薦項目:人事管理系統資料庫設置
    推薦項目:人事管理系統資料庫設置
    LabEx 的這個綜合計畫提供了深入研究資料庫管理世界的寶貴機會,重點是人事管理系統的創建和實施。無論您是新手資料庫管理員還是經驗豐富的開發人員,這種實務經驗都將為您提供必要的技能,以便在關聯式資料庫環境中有效管理和操作資料。 深入了解資料庫基礎知識 這個專案首先引導您完成使用 s...
    程式設計 發佈於2024-11-06
  • Python 中實例方法和類別方法有什麼不同?
    Python 中實例方法和類別方法有什麼不同?
    類別與實例方法Python 的PEP 8 風格指南建議使用“self”作為實例方法的第一個參數,使用“ cls」作為類別方法的第一個參數。理解這兩類方法之間的區別對於有效的物件導向程式設計至關重要。 實例方法實例方法與類別的特定實例相關聯。它們對實例的資料進行操作,並且通常接收“self”作為它們的...
    程式設計 發佈於2024-11-06
  • 將 AdoptiumJDK 原始碼載入到 Eclipse IDE 中
    將 AdoptiumJDK 原始碼載入到 Eclipse IDE 中
    AdoptiumJDK 的安裝程式中沒有內建原始程式碼文件,如果您需要透過 Eclipse IDE 檢查如何使用任何本機 JDK 方法,這是不可能的。 依照以下步驟在Eclipse IDE中載入原始碼: 造訪 AdoptiumJDK 官方網站並按所需的 JDK 版本進行過濾,在我的例子中是 11....
    程式設計 發佈於2024-11-06
  • 絕對定位與相對定位:為什麼它們的行為如此不同?
    絕對定位與相對定位:為什麼它們的行為如此不同?
    了解絕對位置與相對位置:寬度、高度等處理網頁上的元素定位時,了解這些概念絕對位置與相對位置的區別至關重要。讓我們深入探討經常引起疑問的四個關鍵點:1。相對寬度與絕對寬度為何相對定位的div會自動佔據100%寬度,而絕對定位的div只佔據內容寬度? 原因是設定位置:absolute 從文件結構的正常流...
    程式設計 發佈於2024-11-06
  • Python、Node js 和 PHP 中用於驗證碼識別的頂層模組
    Python、Node js 和 PHP 中用於驗證碼識別的頂層模組
    在我们的自动化时代,大多数解决方案都可以免费找到,我现在不是在谈论解决数学问题,而是稍微复杂的任务,例如数据解析,和我们的例子一样,还有 recapcha 识别。但如何找到一个好的模块呢?毕竟,随着技术的发展,每个人都得到了它,无论是认真的开发人员还是彻头彻尾的骗子。 我分析了验证码识别模块的市场,...
    程式設計 發佈於2024-11-06
  • 以下是一些標題選項,重點關注問題格式和核心內容:

**選項 1(直接且簡潔):**

* **如何在 PHP 中有效率地循環多維數組?

**選項2
    以下是一些標題選項,重點關注問題格式和核心內容: **選項 1(直接且簡潔):** * **如何在 PHP 中有效率地循環多維數組? **選項2
    在 PHP 中循環多維數組多維數組可能是解析的一個挑戰,特別是在處理不同深度級別和非順序索引時。考慮一個保存事件資訊的數組,其中可以包含多個藝術家及其相應的鏈接,如下所示:array(2) { [1]=> array(3) { ["eventID"]...
    程式設計 發佈於2024-11-06
  • 透過 Linting 提高程式碼品質
    透過 Linting 提高程式碼品質
    Whenever I start a new project, one of the first things I do is put in place a code linter. For the uninitiated, linters analyze your project and call...
    程式設計 發佈於2024-11-06
  • 如何有效執行JavaScript中的回呼函數?
    如何有效執行JavaScript中的回呼函數?
    理解JavaScript 中回呼函數的本質在JavaScript 中,回呼函數提供了一種方便的機制,可以在另一個函數完成後執行一個函數它的執行。雖然概念很簡單,但回調的最佳實作有時可能不清楚。讓我們探討一個簡化的範例:var myCallBackExample = { myFirstFunc...
    程式設計 發佈於2024-11-06
  • Vue 框架簡介
    Vue 框架簡介
    What is Vue? from the Vue website Vue is a "progressive" JavaScript framework for building user interfaces. It works by build...
    程式設計 發佈於2024-11-06
  • 逃離戲劇:為什麼 HydePHP 是您的 WordPress 替代品
    逃離戲劇:為什麼 HydePHP 是您的 WordPress 替代品
    WordPress 戲劇 隨著 WordPress 生態系統面臨前所未有的混亂,許多開發人員和網站所有者正在重新考慮他們的平台選擇。最近 WordPress 共同創辦人 Matt Mullenweg 和 WP Engine 之間的衝突凸顯了 WordPress 社群內的控制、貢獻和...
    程式設計 發佈於2024-11-06
  • Go 中的並發模式;工作池和扇出/扇入
    Go 中的並發模式;工作池和扇出/扇入
    Go 以其卓越的並發模型而聞名,但許多開發人員只專注於 goroutine 和通道。然而,工作池和扇出/扇入等並發模式提供了真正的效率。 本文將介紹這些進階概念,幫助您最大限度地提高 Go 應用程式的吞吐量。 為什麼並發很重要 並發允許程式有效率地執行任務,特別是在處理 I/O ...
    程式設計 發佈於2024-11-06
  • 如何在 C++ 中將單一字元轉換為 std::string?
    如何在 C++ 中將單一字元轉換為 std::string?
    從單字建立字串從單一字元建立字串人們可能會遇到需要將表示為char 資料類型的單字轉換為std:: string。從字串中取得字元很簡單,只需在所需位置索引字串即可。然而,相反的過程需要不同的方法。 要從單字建立std::string,可以使用多種方法:char c = 34; std::strin...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3