오늘 작업의 대부분은 어제부터 이어진 작업으로, 단지 내 애플리케이션 경로에 비즈니스 로직을 구현하는 것뿐입니다. 그래서 저는 이에 대한 글을 잠시 쉬고 애플리케이션에서 매우 특정한 작업을 수행하기 위해 만든 세 가지 함수에 대해 이야기하겠습니다.
유틸리티 폴더란 무엇입니까?
이것은 집을 찾는 데 어려움을 겪지만 그것들 없이는 애플리케이션이 살아갈 수 없는 모든 작은 기능을 넣는 디렉토리입니다.
utils 폴더는 많은 애플리케이션의 알려지지 않은 영웅을 위한 쓰레기장입니다.
몇 줄 이상의 코드가 필요하고 다시 사용해야 하는 데이터 변환을 수행해야 하는 경우, 다음으로 내보낼 수 있는 자체 파일에 해당 데이터를 저장하는 것이 좋습니다. 나머지 신청서를 작성하세요.
그냥 복사해서 붙여넣으면 어떨까요? 음, 이는 두 가지 프로그래밍 원칙, 즉 DRY와 관심사 분리를 위반하는 것입니다.
같은 말을 반복하지 마세요
자신을 반복하는 것은 단조로울 뿐만 아니라 지원서 전반에 걸쳐 충분히 수행했다면 변경하는 것도 부담스럽습니다. 오늘 비가 올 확률을 계산하는 알고리즘을 상상해 보세요.
사람들이 어떻게 하는지 몰라서 예를 보여드릴 수가 없네요. 그러나 이 계산에 액세스해야 하는 여러 위치의 코드 전체에서 이 모든 것을 복사하면 Very Smart Scientific Weather Committee가 새롭고 더 정확한 알고리즘을 가지고 돌아올 때 매우 당황하게 될 것입니다.
재사용된 코드 부분을 가져와 한 곳에서 업데이트되는 동시에 여러 곳에서 사용할 수 있도록 패키징하는 방법을 찾으세요.
내 utils 폴더에 있는 모든 기능은 내 애플리케이션 전반에 걸쳐 여러 곳에서 사용됩니다!
우려사항의 분리
프로그래머로서 우리는 다양한 작업을 수행하는 함수를 만들고 싶지 않습니다. 우리는 모두 한 가지 일을 하는 많은 함수를 갖고 싶어합니다. 왜? 글쎄요, 이러한 기능을 더 쉽게 재사용할 수 있습니다!
이것이 utils 폴더와 무슨 관련이 있나요? 글쎄요, 제가 다루려고 하는 함수는 실제로 getRoastsById와 같은 함수 내에 자리를 차지하지 않습니다. 왜냐하면 그것이 수행하는 작업이 아니기 때문입니다! 우리가 뭔가 다른 일을 해야 할 때, 우리는 그것을 위한 함수를 만들어야 합니다. 그러나 해당 기능을 위한 논리적인 위치가 없을 경우 "도우미"이기 때문에 이를 utils 디렉토리에 저장합니다!
내 유틸리티 폴더
지금까지 세 가지 사용자 정의 유틸리티가 있습니다.
- insertStatement
- 업데이트문
- objectKeysToCamel
그들의 이름으로 그들이 무엇을 하는지 분명해지길 바라지만, 그들이 해결하는 문제와 그들이 어떻게 작동하는지 간략하게 공유하겠습니다.
insert문
문제: 내 애플리케이션의 다양한 서비스에서 데이터베이스에 대해 INSERT 쿼리를 수행해야 합니다. 이러한 명령문에서는 1) 열 이름과 2) 값을 명시적으로 나열해야 합니다. 각 경로마다 이를 입력할 필요가 없어서 이를 수행하는 함수를 만들었습니다.
입력: 이 함수는 두 개의 매개변수, 즉 데이터베이스의 테이블 이름과 일치하는 문자열인 table과 사용자가 데이터베이스에 추가하려는 모델을 나타내는 Javascript 객체인 obj를 사용합니다.
출력: 1) 자리 표시자 값이 포함된 INSERT 문자열 형식의 속성과 2) 매개변수화된 쿼리에 사용할 값의 배열이 포함된 개체.
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'); function updateStatement(obj, table, id) { const keys = Object.keys(obj); const values = Object.values(obj); let statement = `UPDATE ${table} SET `; keys.forEach((key, index) => { statement += `${snakeCase(key)} = $${index + 1}, `; }); // Remove the last comma and space statement = statement.slice(0, -2); // Determine the correct ID column based on the table const idColumn = table === 'users' ? 'username' : table === 'roasts' ? 'roast_id' : ''; // Finalize the statement with the WHERE clause statement += ` WHERE ${idColumn} = $${keys.length + 1} RETURNING *;`; return { text: statement, values: [...values, id] }; } module.exports = updateStatement
objectKeysToCamel
Problem: The style of my database is different from the style of my JavaScript. However, I'm not willing to compromise in either area. In my JS files, my naming convention uses camelCase, where in my database it uses snake_case. All property names of returned objects are the same, but formatted differently. To maintain this case standard, I would have to access properties in my JS using snake_case, but I don't like this.
Input: The function takes only one parameter, an obj JavaScript object that should have its keys transformed into camelCase formatting.
Output: The same object, with camelCase formatted keys.
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;
Check Out the Project
If you want to keep up with the changes, fork and run locally, or even suggest code changes, here’s a link to the GitHub repo!
https://github.com/nmiller15/roast
The frontend application is currently deployed on Netlify! If you want to mess around with some features and see it in action, view it on a mobile device below.
https://knowyourhomeroast.netlify.app
Note: This deployment has no backend api, so accounts and roasts are not actually saved anywhere between sessions.
위 내용은 [Roast: Day - 내 `utils` 폴더의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.

쿼츠 타이머를 사용하여 작업을 예약 할 때 미리 쿼츠에서 작업 알림을 보내는 방법 작업의 실행 시간은 CRON 표현식에 의해 설정됩니다. 지금...

JavaScript 프로그래밍에서 JavaScript의 프로토 타입 체인에서 함수 매개 변수를 얻는 방법 프로토 타입 체인의 기능 매개 변수를 이해하고 조작하는 방법은 일반적이고 중요한 작업입니다 ...

WeChat 애플릿 웹 뷰에서 vue.js를 사용하는 동적 스타일 변위 실패가 vue.js를 사용하는 이유를 분석합니다.

동시 링크에 대한 요청을 여러 링크와 순서대로 판단하여 결과를 반환하는 방법은 무엇입니까? 탬퍼 몬키 스크립트에서는 종종 여러 체인을 사용해야합니다 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Dreamweaver Mac版
시각적 웹 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

뜨거운 주제



