成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript項(xiàng)目開發(fā)規(guī)范實(shí)例

sorra / 3307人閱讀

摘要:首次發(fā)表在個(gè)人博客總結(jié)一下個(gè)人在開發(fā)及同事代碼的過程中遇到的因?yàn)橐恍╉?xiàng)目規(guī)范帶來的問題及認(rèn)為比較好的解決方法由于個(gè)人經(jīng)驗(yàn)和認(rèn)知水平有限下面僅代表我的個(gè)人觀念歡迎各位大佬多給我提建議以本人最近寫的一個(gè)項(xiàng)目技術(shù)棧為為例的使用因?yàn)橐粋€(gè)項(xiàng)目往

首次發(fā)表在個(gè)人博客

總結(jié)一下個(gè)人在開發(fā)及review同事代碼的過程中遇到的因?yàn)橐恍╉?xiàng)目規(guī)范帶來的問題及認(rèn)為比較好的解決方法;
由于個(gè)人經(jīng)驗(yàn)和認(rèn)知水平有限,下面僅代表我的個(gè)人觀念,歡迎各位大佬多給我提建議;

以本人最近寫的一個(gè)項(xiàng)目(技術(shù)棧為Meteor + React + MongoDB)為例

readme的使用

因?yàn)橐粋€(gè)項(xiàng)目往往需要很多人一起協(xié)助開發(fā),還有可能會(huì)不斷有新手接手項(xiàng)目,所以readme里面一定要僅可能多的信息

項(xiàng)目啟動(dòng)命令

代碼規(guī)范

Commit Message 編寫規(guī)范

命名: class命名,變量命名,函數(shù)命名,組件命名等

組件

目錄結(jié)構(gòu)

常遇到的問題及解決方案

也可以加一些項(xiàng)目中遇到的設(shè)計(jì)到的文檔鏈接

代碼規(guī)范 Commit Message 編寫規(guī)范

編寫Commit Message需要遵循一定的范式,內(nèi)容應(yīng)該清晰明了,指明本次提交的目的,便于日后追蹤問題。

feat: 新功能
fix: 修補(bǔ)bug
docs: 文檔
style: 格式(不影響代碼運(yùn)行的變動(dòng))
refactor: 重構(gòu)
test: 添加測(cè)試
chore: 構(gòu)建過程或輔助工具的變動(dòng)
命名

命名的語(yǔ)義化真的特別特別重要,哪怕不知道要命名的這個(gè)詞的英文是什么,也要去查一下;千萬(wàn)不要以a,b,c等沒有任何語(yǔ)義的詞去命名;之前我也總是注意不到這一點(diǎn),但是最近在看同事的代碼還有重構(gòu)自己之前寫的部分代碼,命名壓根看不明白這個(gè)變量的意思,總之,看這樣的代碼怎一個(gè)痛苦了得

常見class命名關(guān)鍵詞:
布局類:header, footer, container, main, content, aside, page, section
包裹類:wrap, inner
區(qū)塊類:region, block, box
結(jié)構(gòu)類:hd, bd, ft, top, bottom, left, right, middle, col, row, grid, span
列表類:list, item, field
主次類:primary, secondary, sub, minor
大小類:s, m, l, xl, large, small
狀態(tài)類:active, current, checked, hover, fail, success, warn, error, on, off
導(dǎo)航類:nav, prev, next, breadcrumb, forward, back, indicator, paging, first, last
交互類:tips, alert, modal, pop, panel, tabs, accordion, slide, scroll, overlay,
星級(jí)類:rate, star
分割類:group, seperate, divider
等分類:full, half, third, quarter
表格類:table, tr, td, cell, row
圖片類:img, thumbnail, original, album, gallery
語(yǔ)言類:cn, en
論壇類:forum, bbs, topic, post
方向類:up, down, left, right
其他語(yǔ)義類:btn, close, ok, cancel, switch; link, title, info, intro, more, icon; form, label, search, contact, phone, date, email, user; view, loading...

變量命名: 名字要能準(zhǔn)確的描述出該變量所代表的事物
比如表示userid就叫userId,而不要只叫user

函數(shù)命名建議:可使用常見動(dòng)詞約定

 動(dòng)詞       含義      
 get       獲取某個(gè)值            
 set       設(shè)置某個(gè)值             
 is        判斷是否為某個(gè)值    
 has       判斷是否有某個(gè)值  

以下規(guī)則是此項(xiàng)目中使用的,主要看團(tuán)隊(duì)代碼習(xí)慣:

組件名和組件所在文件名使用大駝峰式

css類名使用小寫單詞并用橫線(-)分割

dom節(jié)點(diǎn)以$開頭

組件

每個(gè)組件占一個(gè)文件

組件不包含狀態(tài)則應(yīng)寫為 stateless 組件

非 stateless 組件使用 pure-render-decorator 優(yōu)化

目錄結(jié)構(gòu)
├── client  
│?? ├── main.html                       客戶端頁(yè)面模板
│?? └── main.js                         客戶端入口  
├── imports  
│?? ├── client  
│?? │?? ├── App.jsx                     頂層組件  
│?? │?? ├── components                  公共組件  
│?? │?? ├── routers                     前端路由  
│?? │?? ├── styles                      樣式  
│?? │?? └── views                       視圖  
│?? │??     ├── header                  公共頭  
│?? │??     ├── login                   登錄注冊(cè)  
│?? ├── schema                          模型  
│?? └── util                            工具函數(shù)  
├── packages                            自定義 meteor 包  
├── public                              客戶端資源  
└── server   
    ├── main.js                         服務(wù)端入口  
    └── user                            用戶接口  
issues的使用

項(xiàng)目中總會(huì)遇到很多奇奇怪怪的問題,當(dāng)時(shí)印象深刻,過了一段時(shí)間,就忘了具體的問題及解決辦法,雖然每次可以通過查commit為fix的記錄,但是這樣查找起來很麻煩,我們項(xiàng)目是用gitlab來托管,可以合理的理由issues,每次遇到很棘手的問題的時(shí)候,可以提一個(gè)issues,等后期把這個(gè)問題解決了再把這個(gè)issues給關(guān)閉,并寫上問題原因及解決辦法分析

下面補(bǔ)充的是項(xiàng)目中針對(duì)Meteor后端開發(fā)的一些規(guī)范

數(shù)據(jù)庫(kù) Collection 定義

所有 Collection 定義放在 imports/schema 目錄, 每個(gè) Collection 務(wù)必定義 Schema 來約束字段

Schema 定義

Schema 定義使用 SimpleSchema, 數(shù)據(jù)插入數(shù)據(jù)庫(kù)前必須通過 schema 校驗(yàn), 調(diào)用校驗(yàn)語(yǔ)句為 表名.schema.validate(要插入的數(shù)據(jù));

過濾 Collection 字段

默認(rèn)情況下, 數(shù)據(jù)查詢語(yǔ)句會(huì)返回所有字段, 比如 Memete.users.find({}) 會(huì)將用戶的密碼和 token 一并返回, 這樣是不安全不正確的, find / findOne 的第二個(gè)參數(shù)是查詢選項(xiàng), fields 字段可以控制返回字段, 例如:

Meteor.users.find(
    { },
    {
        fields: {
            username: 1,
            profile: 1,
        },
    },
);

該查詢會(huì)返回 _id, username, profile 字段, 其中 _id 是默認(rèn)返回的

自己定義populate方法(取出關(guān)聯(lián)數(shù)據(jù))

在做邀請(qǐng)新的好友入群的時(shí)候,添加新的好友,利用reywood:publish-composite并不會(huì)自動(dòng)更新數(shù)據(jù),所以以后直接自己在客戶端定義方法
這樣做的好處是解決了取關(guān)聯(lián)數(shù)據(jù)不會(huì)自動(dòng)更新的bug,但是有點(diǎn)麻煩的是每次需要關(guān)聯(lián)數(shù)據(jù)的時(shí)候必須在客戶端調(diào)用一次方法,正在考慮有沒有更好的解決方法

import { Meteor } from "meteor/meteor";

const PopulateUtil = {
    group(group) {
        if (group) {
            group.members = Meteor.users.find({ _id: { $in: group.members } }).fetch();
            group.admin = Meteor.users.findOne({ _id: group.admin });
        }
    },
    groups(groups) {
        groups.forEach(group => PopulateUtil.group(group));
    },
};

export default PopulateUtil;

因?yàn)檫@次項(xiàng)目需要自己設(shè)計(jì)數(shù)據(jù)庫(kù),還有自己定義后端方法,之前沒有任何經(jīng)驗(yàn),做到現(xiàn)在也總結(jié)出一點(diǎn)心得:

數(shù)據(jù)庫(kù)設(shè)計(jì)一定要根據(jù)具體的業(yè)務(wù)邏輯(開始設(shè)計(jì)之前一定要和產(chǎn)品溝通清楚產(chǎn)品邏輯)

能在后端取到的數(shù)據(jù),在接口定義的時(shí)候不要讓前端去傳

最后感覺后端的邏輯真的很復(fù)雜,需要各種判斷,各種情況都得想到

推薦看一下這本代碼大全(第二版),等看完這本書再好好的完善一下這篇文章

參考

class如何命名更規(guī)范
代碼大全(第二版)
Commit Message 編寫指南

About

github
blog

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90188.html

相關(guān)文章

  • JavaScript instanceof運(yùn)算符深入分析

    摘要:注意基本變量類型不是對(duì)象類型,只有基本包裝類型才是對(duì)象類型。至于顯示的原型,在里用屬性表示,這個(gè)是原型繼承的基礎(chǔ)知識(shí),在這里就不在敘述了。 前言 如果你要開發(fā)一個(gè)復(fù)雜的產(chǎn)品,那么肯定少不了使用面向?qū)ο髾C(jī)制,當(dāng)然也避不開 Javascript 里面的繼承,instanceof 運(yùn)算符是原生 Javascript 語(yǔ)言中用來判斷實(shí)例繼承的操作符。所以我們有必要深入理解該運(yùn)算符! inst...

    zhangyucha0 評(píng)論0 收藏0
  • 實(shí)現(xiàn) JavaScript 異步方法 Promise.all

    摘要:本次的任務(wù)假如。。。。。引擎發(fā)生了重大故障,方法變成了,為了拯救世界,需要開發(fā)一個(gè)模塊來解決此問題。實(shí)現(xiàn)首先要知道是什么是對(duì)異步編程的一種抽象。數(shù)組中任何一個(gè)為的話,則整個(gè)調(diào)用會(huì)立即終止,并返回一個(gè)的新的對(duì)象。 本次的任務(wù) 假如。。。。。 JavaScript v8 引擎發(fā)生了重大故障,Promise.all 方法變成了 undefined ,為了拯救 JavaScript 世界,需要...

    mushang 評(píng)論0 收藏0
  • 打造屬于自己的underscore系列 ( 一 )

    摘要:目前通行的模塊規(guī)范主要集中在和,因此為了讓定義的庫(kù)能夠適用于各種規(guī)范。在框架的定義時(shí)需檢測(cè)使用環(huán)境并兼容各種規(guī)范。服務(wù)端規(guī)范,檢測(cè)是否存在,滿足時(shí)通過將暴露出來,不滿足則通過對(duì)象暴露出來。前者回調(diào)函數(shù)處理的是值和下標(biāo),后者處理的是值和屬性。 本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處 https://www.cnblogs.com/kidfl... underscore作為開發(fā)中比較常用的一個(gè)...

    nifhlheimr 評(píng)論0 收藏0
  • javascript 代碼規(guī)范

    目錄 1.為什要遵守代碼規(guī)范 2.編寫代碼需遵守的幾個(gè)原則 3.編碼規(guī)范(Coding Conventions) 4.命名規(guī)范(Naming Conventions) 5.css基礎(chǔ)class類 1.為什要遵守代碼規(guī)范 軟件bug的修復(fù)是昂貴的,并且隨著時(shí)間的推移,這些bug的成本也會(huì)增加,尤其當(dāng)這些bug潛伏并慢慢出現(xiàn)在已經(jīng)發(fā)布的軟件中時(shí)。當(dāng)你發(fā)現(xiàn)bug 的時(shí)候就立即修復(fù)它是最好的,此時(shí)你代...

    cnsworder 評(píng)論0 收藏0
  • JavaScript 編碼規(guī)范

    摘要:這樣的變量增加了代碼量,并且混淆讀者。錯(cuò)誤代碼示例變量雖然聲明了,但沒被使用持續(xù)更新 JavaScript 編碼規(guī)范 一、命名規(guī)范 1. 變量 命名方法:小駝峰式命名法(由小寫字母開始,后續(xù)每個(gè)單詞首字母都大寫) 命名建議:語(yǔ)義化的名詞 特殊:布爾值變量建議添加符合其含義的前綴動(dòng)詞 is:是否 can:能不能 has:有沒有 示例: // 頁(yè)面標(biāo)題 let pageT...

    wenshi11019 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<