少代碼替代低代碼(少代碼替代低代碼怎么弄)
目標(biāo)是用盡可能少的代碼實(shí)現(xiàn)盡可能多的價(jià)值。讓我們來看看實(shí)現(xiàn)用更少代碼做更多事的技術(shù)、工具和框架。
譯自Less Code Alternatives to Low Code。
在我們系列文章的第一部分,我們分析了“低代碼”和“少代碼”在思想上的區(qū)別。我們明確了雖然低代碼解決方案讓更多人可參與軟件開發(fā),但它存在局限性,特別是在開發(fā)復(fù)雜系統(tǒng)時(shí)。
增加的每一行代碼都會提高系統(tǒng)的復(fù)雜度和維護(hù)負(fù)擔(dān)。因此,目標(biāo)是讓團(tuán)隊(duì)用盡可能少的代碼實(shí)現(xiàn)盡可能多的價(jià)值。在本文中,我們將探討實(shí)現(xiàn)用更少代碼做更多事的技術(shù)、工具和框架。
改變思維方式
擁抱“最小化編程”理念非常重要。這種理念本質(zhì)上傾向追求代碼的清晰性,激勵你識別代碼中不可或缺的元素,然后拋棄其他部分。是否存在更簡潔的解決方案?工具能否用更少的代碼實(shí)現(xiàn)相同的結(jié)果?我正在構(gòu)建獨(dú)特且具有價(jià)值的東西,還是在重復(fù)解決已被解決的問題?
每一行代碼都必須從它所提供的潛在價(jià)值和代表的未來負(fù)擔(dān)進(jìn)行審視。通過避免或刪除不必要的代碼,利用他人的工作來減少這種負(fù)擔(dān)。
調(diào)整過程
這種對“少碼”的傾向不僅僅局限于個(gè)別開發(fā)者,而應(yīng)該滲透到整個(gè)軟件開發(fā)生命周期。代碼評審不應(yīng)僅視為批評環(huán)節(jié),而應(yīng)作為精簡、明晰和簡化代碼的團(tuán)隊(duì)協(xié)作工作。同樣,重構(gòu)應(yīng)被視為利用新知識改進(jìn)舊代碼的常規(guī)練習(xí)。一個(gè)更簡潔、流暢的代碼庫就像一個(gè)組織良好的工作空間: 它能提高工作效率。自動化測試與此相輔相成,起著安全網(wǎng)的作用。它允許你修剪代碼庫并替換組件,同時(shí)確保新版本的表現(xiàn)如預(yù)期。
從低代碼向少代碼邁進(jìn)的框架和工具
現(xiàn)代框架通過減少執(zhí)行常見任務(wù)所需編寫的代碼量,極大地提高了開發(fā)效率??蚣艿牡讓哟a由社區(qū)進(jìn)行了測試和維護(hù),減輕了周邊維護(hù)負(fù)擔(dān)。代碼生成器不僅避免了重復(fù)性的擊鍵,還確保生成的代碼本身具有一致性和高效性。此外,我們開始看到AI和自動化技術(shù)為開發(fā)者提供新的支持,使其工作更具生產(chǎn)力。
在本節(jié)中,我們首先查看一些輔助前端開發(fā)的工具。之后,我們再深入研究幾個(gè)真正體現(xiàn)“少代碼”方法優(yōu)勢的工具。
前端開發(fā)中低代碼的替代工具
前端開發(fā)有許多選擇,雖然幾種工具廣為人知,但這個(gè)領(lǐng)域發(fā)展迅速,新的工具層出不窮。這種工具的不斷變化可能會讓人覺得這塊領(lǐng)域善變,好像團(tuán)隊(duì)只是追隨潮流,但實(shí)際情況通常不是這樣。這些新進(jìn)入者往往解決新的問題,以新方式解決現(xiàn)有問題,或針對特定利基進(jìn)行優(yōu)化。它們借鑒現(xiàn)有工具的經(jīng)驗(yàn)教訓(xùn)而構(gòu)建,通常將它們作為增強(qiáng)或互操作性的基礎(chǔ)以幫助采用。
例如,Next.js 在 React 的基礎(chǔ)上增加了意見和功能,這些功能幫助創(chuàng)建 Web 應(yīng)用程序。它可以幫助解決混合靜態(tài)和服務(wù)器端渲染內(nèi)容、基于頁面的路由、數(shù)據(jù)獲取、中間件等常見挑戰(zhàn)。
Next.js 利用文件系統(tǒng)提供自動路由,消除了單獨(dú)的路由配置的需要。這大大簡化了代碼,使其更易于理解和維護(hù)。
app/├─ page.js└─ about/ └─ page.js
在這個(gè)結(jié)構(gòu)中,app/page.js和app/about/page.js文件自動成為應(yīng)用程序中的頁面路由(/和/about)。
Next.js 還通過允許開發(fā)人員為 API 創(chuàng)建自定義路由處理程序來方便后端開發(fā);這些文件約定命名為[route].js。
// app/api/route.jsexport async function GET() { const res = await fetch('<https://mydata.example.com/latest>', { headers: { 'Content-Type': 'application/json' }, }); const data = await res.json(); return Response.json(data);}
相比之下,Astro更注重內(nèi)容,具有確保博客、作品集、電子商務(wù)或營銷網(wǎng)站等頁面加載時(shí)間的功能。Astro的部分水合特性在減少發(fā)送到瀏覽器的代碼量方面是一個(gè)突破。與傳統(tǒng)的完全水合整個(gè)應(yīng)用程序的框架不同,Astro僅向?yàn)g覽器發(fā)送必要的JavaScript,從而極大地減少了加載時(shí)間。
// This component won't send any JavaScript to the client// Great for static sites or server-rendered pages <html> <body> <h1>Hello, world!</h1> </body></html> // This component sends a tiny amount of JavaScript to the client// Astro will automatically only hydrate the <Counter /> component, nothing else <html> <body> <Counter client:load /> </body></html>
雖然Astro提供了自己的組件框架,但它也與React、Svelte和Vue等多種其他框架互操作。
其他工具關(guān)注構(gòu)建時(shí)間改進(jìn)、托管和預(yù)覽、無障礙性、自動化測試、類型安全等圍繞開發(fā)網(wǎng)站和應(yīng)用程序的許多其他任務(wù)。
探索和選擇適合您情況的工具,而不是最熟悉的工具,可以在很少投入的情況下極大地影響您的應(yīng)用程序。
后端開發(fā)的低代碼替代工具
后端工具的變化節(jié)奏一度非常緩慢。然而,最近這個(gè)領(lǐng)域變得更加活躍,以至于很容易錯過新工具的全貌。與前端開發(fā)一樣,這些新選擇通常解決新的問題,或在現(xiàn)有選項(xiàng)基礎(chǔ)上進(jìn)一步提高生產(chǎn)力和穩(wěn)定性。
不去探索這些新選項(xiàng),會導(dǎo)致團(tuán)隊(duì)從事低價(jià)值、沒有差異化的工作,或認(rèn)為過去的挑戰(zhàn)至今仍未解決。
例如,Supabase在PostgreSQL基礎(chǔ)上,結(jié)合其他一些開源工具,提供了一整套后端開發(fā)工具,用于構(gòu)建和托管API、數(shù)據(jù)持久化、函數(shù)和認(rèn)證等,所有這些都增強(qiáng)了PostgreSQL數(shù)據(jù)庫。
Supabase可以以極少的代碼實(shí)現(xiàn)用戶認(rèn)證:
import { createClient } from '@supabase/supabase-js' const supabase = createClient('<https://your-supabase-url>', 'your-public-api-key') async function signUp(email, password) { const { user, error } = await supabase.auth.signUp({ email: email, password: password, }) if (error) console.error(error) else console.log(user)}
另一個(gè)進(jìn)步領(lǐng)域是基礎(chǔ)設(shè)施即代碼,也稱為自我配置運(yùn)行時(shí)。這些是工具、框架或平臺,盡可能減少構(gòu)建應(yīng)用程序的重復(fù)工作,讓團(tuán)隊(duì)只關(guān)注特定產(chǎn)品的代碼。這類新興選項(xiàng)包括Nitric、Encore、Shuttle、Ampt和Wing等,每種方法針對這個(gè)問題及其適用場景各有不同。
以下是一個(gè)使用Nitric構(gòu)建的API示例,它消除了使用傳統(tǒng)IaC工具構(gòu)建部署項(xiàng)目的需要。相反,要部署必要的基礎(chǔ)設(shè)施,Nitric CLI會自動創(chuàng)建資源規(guī)范,然后配置和設(shè)置運(yùn)行應(yīng)用代碼所需的API網(wǎng)關(guān)和文檔存儲。
import { api, collection } from '@nitric/sdk'import { v4 as uuid } from 'uuid' const profileApi = api('public')const profiles = collection('profiles').for('writing', 'reading') profileApi.post('/profiles', async (ctx) => { const id = uuid() // Store the new profile in the profiles collection await profiles.doc(id).set({ name: ctx.req.json().name, age: ctx.req.json().age, homeTown: ctx.req.json().homeTown, }) // Set a JSON HTTP response ctx.res.json({ msg: `Profile with id $[id] created.`, })})
適應(yīng)變化
在敏捷和效率至關(guān)重要的時(shí)代,“少代碼”不僅是編寫更少的代碼,而是利用最好的工具、實(shí)踐和思維方式,以更少的努力交付更多價(jià)值。隨著技術(shù)格局不斷發(fā)展,開發(fā)者和團(tuán)隊(duì)保持好奇心和適應(yīng)變化至關(guān)重要。
工具和產(chǎn)品格局的變化并非簡單追隨潮流,而是關(guān)乎抽象、效率和提供構(gòu)建更好系統(tǒng)的新方法。