Styl i konwencje (Google/Sun style)
Java ma długą tradycję konwencji — od klasycznego Sun Code Conventions po nowoczesny Google Java Style Guide. ProfessNet przyjmuje Google Java Style i egzekwuje go automatycznie, żeby kod wyglądał tak samo niezależnie od autora.
Nazewnictwo
| Element | Konwencja | Przykład |
|---|---|---|
| Klasa, interfejs | PascalCase | ProbeService, Scannable |
| Metoda, zmienna | camelCase | runScan, forestName |
| Stała | UPPER_SNAKE_CASE | MAX_RETRIES |
| Pakiet | małe litery | com.professnet.zeus.inventory |
| Parametr typu | jedna litera | T, K, V |
package com.professnet.zeus.inventory;
public final class ProbeService {
private static final int MAX_RETRIES = 3;
private final ProbeRepository repository;
public ProbeService(ProbeRepository repository) {
this.repository = repository;
}
public ScanResult runScan(String forestName) {
// ...
}
}
Standard ProfessNet: nazwy interfejsów nie mają prefiksu
I(to konwencja C#, nie Javy). Pakiety odwróconą domeną:com.professnet.zeus.<moduł>.
Formatowanie wg Google Style
Najważniejsze zasady, które wymusza Google Java Format:
- 2 spacje wcięcia (nie 4, nie taby).
- Limit linii 100 znaków.
- Klamry zawsze, nawet przy jednolinijkowym
if. - Każda klasa najwyższego poziomu w osobnym pliku.
// dobrze — klamry zawsze, nawet przy jednej instrukcji
if (probe == null) {
return Optional.empty();
}
// źle — brak klamer
if (probe == null) return Optional.empty();
Importy
Importujemy konkretne klasy, nie używamy gwiazdek. Importy statyczne tylko dla asercji/utility, czytelnie.
// źle — import gwiazdkowy
import java.util.*;
// dobrze — jawne importy
import java.util.List;
import java.util.Optional;
Optional zamiast null w API
Metody, które mogą nie zwrócić wartości, zwracają Optional<T>, a nie null.
public Optional<Probe> findByHost(String host) {
return repository.findByHost(host);
}
Standard ProfessNet: publiczne API nie zwraca
nulldla „braku wyniku" — używamyOptional.nulljako wartość kolekcji jest zakazany; pusta lista zamiastnull.
Automatyzacja stylu
Styl pilnuje Spotless z formaterem Google Java Format, podpięty do builda.
<!-- Maven: spotless-maven-plugin -->
<configuration>
<java>
<googleJavaFormat><version>1.22.0</version></googleJavaFormat>
</java>
</configuration>
mvn spotless:check # CI: weryfikuje styl
mvn spotless:apply # lokalnie: formatuje
Wskazówka: dołóż Checkstyle z konfiguracją Google, żeby pilnować reguł, których sam formatter nie złapie (np. nazewnictwo, kolejność modyfikatorów).
Google Java Style + Spotless + Checkstyle w buildzie dają jednolity, czytelny kod bez ręcznych poprawek na review. Dyskusję o formatowaniu zastępuje maszyna, a my skupiamy się na logice.