Java-Entwicklungshandbuch (1) [Benennung von Programmierprotokollen]

1. Programmierprotokoll

(1) Benennungsstil:

1. [Obligatorisch] Die Benennung im Code darf weder mit einem Unterstrich oder einem Dollarzeichen beginnen noch mit einem Unterstrich oder einem Dollarzeichen enden.
Gegenbeispiel:_name / __name / $name / name_ / name$ / name__

2. [Obligatorisch] Bei allen programmbezogenen Namen ist die Verwendung einer Mischung aus Pinyin und Englisch strengstens untersagt, und die direkte Verwendung von Chinesisch ist nicht gestattet.
Hinweis: Korrekte englische Rechtschreibung und Grammatik können den Lesern das Verständnis erleichtern und Unklarheiten vermeiden. Beachten Sie, dass die reine Pinyin-Benennungsmethode vermieden werden sollte.
Positivbeispiel: ali / alibaba / taobao / cainiao/ aliyun/ youku / hangzhouusw. international gebräuchliche Namen, die mit dem Englischen gleichgesetzt werden können.
Gegenbeispiel:DaZhePromotion [打折] / getPingfenByName() [评分] / String fw[福娃] / int 某变量 = 3

3. [Obligatorisch] Vermeiden Sie die Verwendung rassistisch diskriminierender Wörter in allen Sprachen im Code und in Kommentaren.
Positivbeispiel: 日本人 / 印度人 / blockList / allowList / secondary
Negativbeispiel:RIBENGUIZI / Asan / blackList / whiteList / slave

4. [Obligatorisch] Verwenden Sie UpperCamelCase für Klassennamen, außer in den folgenden Fällen: DO / BO / DTO / VO / AO /
PO / UID usw.

Positivbeispiel: ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
Negativbeispiel:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion

5. [Obligatorisch] Methodennamen, Parameternamen, Mitgliedsvariablen und lokale Variablen verwenden alle den LowerCamelCase-Stil.
Positives Beispiel:localValue / getHttpMessage() / inputUserId

6. [Obligatorisch] Die Namen der Konstanten werden alle groß geschrieben, die Wörter werden durch Unterstriche getrennt und der semantische Ausdruck soll vollständig und klar sein. Denken Sie nicht, dass der Name zu lang ist.
Positivbeispiel: MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
Negativbeispiel:MAX_COUNT / EXPIRED_TIME

7. [Obligatorisch] Der Name einer abstrakten Klasse beginnt mit Abstract oder Base; der Name einer Ausnahmeklasse endet mit Exception; der Name einer Testklasse beginnt mit dem Namen der zu testenden Klasse und endet mit Test.

8. [Obligatorisch] Der Typ wird eng mit eckigen Klammern verbunden, um ein Array anzuzeigen.
Positivbeispiel: 定义整形数组 int[] arrayDemo。
Negativbeispiel:在 main 参数中,使用 String args[]来定义。

9. [Obligatorisch] Jeder booleschen Variablen in der POJO-Klasse sollte kein is vorangestellt werden, da sonst die Frame-Analyse zu Serialisierungsfehlern führt.
Erläuterung: In der ersten Klausel der Tabellenerstellungsvereinbarung in der MySQL-Spezifikation in diesem Artikel übernimmt die Variable, die Ja oder Nein ausdrückt, die Benennungsmethode is_xxx, sodass die Zuordnungsbeziehung von is_xxx zu xxx festgelegt werden muss.
Gegenbeispiel:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也isDeleted(),框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

10. [Obligatorisch] Verwenden Sie für Paketnamen einheitlich Kleinbuchstaben, und zwischen Punkttrennzeichen gibt es nur ein englisches Wort mit natürlicher Semantik. Der Paketname wird einheitlich im Singular verwendet, aber wenn der Klassenname eine Pluralbedeutung hat, kann der Klassenname die Pluralform verwenden.
Positives Beispiel:应用工具类包名为 com.alibaba.ei.kunlun.aap.util、类名为 MessageUtils(此规则参考 spring 的 框架结构)

11. [Obligatorisch] Vermeiden Sie die Verwendung genau desselben Namens zwischen Mitgliedsvariablen von untergeordneten und übergeordneten Klassen oder zwischen lokalen Variablen verschiedener Codeblöcke, da dies die Verständlichkeit beeinträchtigt.
Erläuterung: Die Mitgliedsvariablen der Unterklasse und der Oberklasse haben denselben Namen, sogar öffentliche Variablen können kompiliert werden. Darüber hinaus ist es zulässig, dass lokale Variablen in verschiedenen Codeblöcken in derselben Methode denselben Namen haben, und diese Situationen müssen vermieden werden. Vermeiden Sie für Nicht-Setter-/Getter-Parameternamen denselben Namen wie Mitgliedsvariablen.
Gegenbeispiel:

public class ConfusingName {
    
    
 public int stock;
 // 非 setter/getter 的参数名称,不允许与本类成员变量同名
 public void get(String alibaba) {
    
    
 	if (condition) {
    
    
 		final int money = 666;
 		// ...
 	}
 	for (int i = 0; i < 10; i++) {
    
    
 		// 在同一方法体中,不允许与其它代码块中的 money 命名相同
 		final int money = 15978;
 		// ...
 	}
  } 
}
class Son extends ConfusingName {
    
    
  // 不允许与父类的成员变量名称相同
  public int stock; 
 
 }

12. [Pflichtfeld] Schluss mit völlig unkonventionellen Abkürzungen, um Unwissenheit über die Bedeutung zu vermeiden.
Gegenbeispiel:AbstractClass“缩写”成 AbsClass;condition“缩写”成 condi;Function 缩写”成 Fu,此类 随意缩写严重降低了代码的可阅读性。

13. [Empfehlung] Um das Ziel der Selbsterklärung des Codes zu erreichen, verwenden Sie bei der Benennung benutzerdefinierter Programmierelemente eine möglichst vollständige Wortkombination zum Ausdruck.
Positivbeispiel: 对某个对象引用的 volatile 字段进行原子更新的类名为 AtomicReferenceFieldUpdater。
Negativbeispiel:常见的方法内变量为 int a;的定义方式。

14. [Empfehlung] Wenn Sie Konstanten und Variablen benennen, setzen Sie die Substantive, die den Typ angeben, an das Ende des Wortes, um die Erkennung zu verbessern.
Positivbeispiel: startTime / workQueue / nameList / TERMINATED_THREAD_COUNT
Negativbeispiel:startedAt / QueueOfWork / listName / COUNT_TERMINATED_THREAD

15. [Empfehlung] Wenn ein Modul, eine Schnittstelle, eine Klasse oder eine Methode ein Entwurfsmuster verwendet, muss sich das spezifische Muster in der Benennung widerspiegeln.
Erläuterung: Die Verkörperung des Designmusters im Namen hilft den Lesern, das architektonische Designkonzept schnell zu verstehen.
Positives Beispiel:public class OrderFactory; public class LoginProxy; public class ResourceObserver;

16. [Empfehlung] Fügen Sie den Methoden und Eigenschaften in der Schnittstellenklasse keine Modifikatoren (nicht öffentlich) hinzu, halten Sie den Code prägnant
und fügen Sie effektive Javadoc-Kommentare hinzu. Versuchen Sie, keine Variablen in der Schnittstelle zu definieren. Wenn Sie Variablen definieren müssen, stellen Sie sicher, dass sie
mit der Schnittstellenmethode zusammenhängen und die Grundkonstante der gesamten Anwendung sind.
Positivbeispiel: 接口方法签名 void commit(); 接口基础常量 String COMPANY = "alibaba";
Negativbeispiel:接口方法定义 public abstract void f(); 说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。

17. Es gibt zwei Regelsätze für die Benennung von Schnittstellen und Implementierungsklassen:
1) [Obligatorisch] Für Service- und DAO-Klassen, basierend auf dem Konzept von SOA, müssen die exponierten Dienste Schnittstellen sein und die internen Implementierungsklassen werden
davon unterschieden Schnittstellen mit dem Suffix Impl.
Positives Beispiel: CacheServiceImpl 实现 CacheService 接口。
2) [Empfehlung] Wenn es sich um einen Schnittstellennamen handelt, der Fähigkeiten beschreibt, verwenden Sie das entsprechende Adjektiv als Schnittstellennamen (normalerweise ein Adjektiv von –able).
Positives Beispiel:AbstractTranslator 实现 Translatable 接口。

18. [Referenz] Fügen Sie dem Namen der Aufzählungsklasse das Suffix Enum hinzu. Die Namen der Aufzählungsmitglieder müssen alle groß geschrieben werden und Wörter sollten durch Unterstriche getrennt werden.
Erläuterung: Die Aufzählung ist eigentlich eine spezielle Konstantenklasse und der Konstruktor ist standardmäßig gezwungen, privat zu sein.
Positives Beispiel:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。

19. [Referenz] Namenskonventionen jeder Schicht:
A) Namenskonventionen für Service-/DAO-Schichtmethoden
1) Der Methode zum Abrufen eines einzelnen Objekts wird get vorangestellt.
2) Der Methode zum Abrufen mehrerer Objekte wird eine Liste vorangestellt und sie endet mit einer Pluralzahl, z. B. listObjects.
3) Der Methode zum Erhalten statistischer Werte wird count vorangestellt.
4) Der Einfügemethode wird „Speichern/Einfügen“ vorangestellt.
5) Der Löschmethode wird „remove/delete“ vorangestellt.
6) Der geänderten Methode wird update vorangestellt.

B) Namenskonvention für Domänenmodelle
1) Datenobjekt: xxxDO, wobei xxx der Name der Datentabelle ist.
2) Datenübertragungsobjekt: xxxDTO, wobei xxx der Name ist, der sich auf die Geschäftsdomäne bezieht.
3) Anzeigeobjekt: xxxVO, wobei xxx im Allgemeinen der Name der Webseite ist.
4) POJO ist der Sammelname von DO/DTO/BO/VO und es ist verboten, es als xxxPOJO zu bezeichnen.

Unter Berufung auf Alibabas „Java-Entwicklungshandbuch“ (Songshan-Version)

Supongo que te gusta

Origin blog.csdn.net/AKALXH/article/details/116587475
Recomendado
Clasificación