# Naming Rules ###### tags: `eGroupAI 開發規範` ## 基本原則 ### 命名方法介紹 - [Pascal Case,巴斯卡命名法/帕斯卡命名法](https://zh.wikipedia.org/wiki/%E5%B8%95%E6%96%AF%E5%8D%A1%E5%91%BD%E5%90%8D%E6%B3%95) - 名稱的第一個字母和每個隨後串聯單字的第一個字母都是大寫。e.g.FirstName、MemberName。 - [Camel Case,駝峰式命名法](https://zh.wikipedia.org/wiki/%E9%A7%9D%E5%B3%B0%E5%BC%8F%E5%A4%A7%E5%B0%8F%E5%AF%AB) - 名稱的第一個字母是小寫,而每個隨後串聯文字的第一個字母是大寫。e.g.firstName、memberName。 ### 類別命名 - 主要採 Pascal Case 或 Upper Camel Case 命名 ```java public class Caculate { //code here } ``` ### 介面與介面實作命名 - 主要採 Pascal Case 或 Upper Camel Case 命名法,字尾加上DAO或是DAOImpl - 介面 ```java public interface MemberDAO { //your method } ``` - 介面實作 ```java public class MemberDAOImpl implements MemberDAO { //your implement method } ``` ### 常數命名 - 主要採 Pascal Case 或 Upper Camel Case 命名法,字尾加上DAO或是DAOImpl ```java public class FacebookConnection { private static final String CLIENT_ID = "xxxxxxxx"; private static final String CLIENT_SECRET = "xxxxxxxxx"; private static final String REDIRECT_URI = "xxxxxxxxxx"; private static final String SCOPE = "public_profile, email"; } ``` - 實體(instance)常數:採 Lower Camel Case 命名法 ```java public class Counter { /** * 最大值 */ final int maxSize = 123; /** * 最小值 */ final int minSize = 1; } ``` ### 屬性(Field)的命名 - 主要採 Lower Camel Case ```java public lass Member { private String account; private String password; private String name; private String email; private String content; private Date birth; } ``` ### 函式方法命名 - 主要採 Lower Camel Case - 動詞+(名詞)+(介系詞,如:By)+(名詞) ```java public interface MemberDAO { public void insert(Member member); public void update(Member member); public void delete(Member member); public void updateResetNO(Member member); public List<Member> getListByIdentity(Member member); } ``` ## 資料庫 ### 原則 - 不用艱澀單字,名稱盡可能簡單易讀(除專有名詞) - 不使用系統字、SQL語法名稱,避免衝突 - 不要加上非功能意義的名稱 ### 資料表Table - 使用_分隔單字 - 全部使用小寫 e.g.article_category ### 欄位Column - 主要欄位冠 Table 名 - 是否判斷欄位 前面冠上 is - FK不冠 Table 名 - Table 名稱 3 個單字以上,Colum使用[前兩個單字縮寫]+[ _ ] **注意:不使用系統字、SQL語法命名TB,e.g. order** ### DynamoDB 命名規則 #### **特性** DynamoDB強調搜尋速度,使用Key、Value進行資料索引,並建議將資料表依照屬性的 1. 使用頻率 2. 資料大小 分割成多的資料表,因此規則有所更動 #### **資料表分割規則** ##### **常用資料 VS 不常用資料** 1. **常用 : 主名詞(使用者) + _ + 副名詞 + _ + info** 2. **不常用 : 主名詞** `舉例 :` `photo 內有100屬性` `10個屬性常用到` `90個屬性不常用常用 : member_photo_info` `不常用 : member_photo` ##### **敏感資料** **主名詞 + 名詞(敏感資料)** 1. 登入 login 2. 銀行 bank `舉例 :` `login : member_login_info、member_login` `bank : member_bank_info、member_bank` ##### **常用資料 VS 不常用資料+敏感資料** **主名詞 + 名詞(敏感資料)** 1. 登入 login 2. 銀行 bank `舉例 :` `login : member_login_info` `bank : member_bank_info` #### **資料屬性命名規則** 1. 不用主名詞 2. 使用副名詞 3. 不包含判斷常用的名詞(info) 舉例 :member_bank_info : PK 為 bank(副名詞) + ID = bankID member_bank : PK 為 bank(副名詞) + ID = bankID ## Package命名 ### 一般原則 - package 名稱全為小寫 - 不同功能以不同的 package 來切割、歸類 - 通常 package 會包含了以下項目 - 專案名稱 - 功能名稱 - 模組、API服務商名稱 ### 專案名稱 假設專案名稱為 eGroupAI,一般而言 package 會以 com.egroupai 開頭 ```java package com.egroupai.webapp.entity; ``` ### 功能名稱 ```java //網頁系統的 MVC 控制器 package com.egroupai.webapp.controller; //資料存取方法介面 package com.egroupai.webapp.dao; //資料存取方法實作 package com.egroupai.webapp.dao.impl; ``` ### 模組、API服務商名稱 ```java //排程模組 package com.egroupai.webapp.schedule; //共用模組(系統共同使用模組放在util下 e.g. 日期轉換模組、上傳模組、UUID產生器模組) package com.egroupai.webapp.util; //Microsoft 臉部辨識API package com.egroupai.webapp.projectoxford.entity package com.egroupai.webapp.projectoxford.util ``` ## Service命名 ## **新增** --- - 單筆儲存 `save` - 多筆儲存 `batchsave` ## **刪除** --- ## **修改** --- ## **查詢** --- DynamoDB 分成兩種搜尋方式 1.Query - PK + RK 搜尋 `query` - Second-Index只有PK `query + By + 搜尋的PK名稱` e.g : queryByMemberID - Second-Index有PK和RK `query + By + 搜尋的PK名稱 + 搜尋的RK名稱` - queryByMemberIDCreateDate 2.Scan PK + RK 搜尋 `scan` - Second-Index只有PK `scan+ By + 搜尋的PK名稱` e.g : scanByMemberID - Second-Index有PK和RK `scan+ By + 搜尋的PK名稱 + 搜尋的RK名稱` - scanByMemberIDCreateDate - Auto-generated Table of Content [ToC]