<aside> 😎 백엔드의 코드 컨벤션을 기록해둔 페이지입니다.
</aside>
Domain Entity 선언
// SelfValidationg은 필요한 경우에만 상속한다.
public class MyDomain extend SelfValidationg<MyDomain> {
// 클래스 변수 맨위에 위치한다.
private static final String WE_ARE_NEW_BARAMS = "뉴바람스";
// 최대한 Value로 표현한다.
private DomainId domainId;
private Name name;
private Content content;
// SelfValidationg을 상속하지 않는다면 최대한 생성자는 Lombok을 사용한다.
// 단, 상속했다면 생성자에 검증 로직을 추가한다.
public MyDomain(DomainId domainId, ...) {
this.domainId = domainId;
...
this.validateSelf();
}
// Method ...
}
Domain Value 선언
public class Name extend SelfValidationg<Name> {
// 클래스 변수 맨위에 위치한다.
private static final String WE_ARE_NEW_BARAMS = "뉴바람스";
// 불변성을 유지한다.
// 검증 Annotation은 한 줄에 하나씩 작성한다.
@NotBlank
@Size(max = 20)
private final String name;
// Fixture Monkey에서 생성 오류가 발생할 때 @ConstructorProperties를 붙인다.
public Name(String name) {
this.name = name;
this.validateSelf();
}
// Method ...
}
JPA Entity 선언
@Entity
@Table(name = "my_entities")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class MyEntity extend BaseEntity {
// 필드는 위에 위치한다.
// 해당 레코드의 속성을 반드시 표현한다.
@Column(nullable = false, length = 20)
private String name;
@Column(nullable = false, length = 50, unique = true)
private String email;
// Embedded는 가운데 위치한다.
// 꼭 필요한 Embedded만 사용한다.
@Embedded
private Address address;
// 꼭 필요한 Enum 객체만 사용한다.
@Enumerated(value = EnumType.STRING)
private MyEnum enum;
// 연관관계는 맨밑에 위치한다.
@OneToMany
private List<MySubEntity> subEntities = new ArrayList<>();
// 생성자, 메서드 X
}
inner class
private 메서드 선언
parameter, 매개 변수
Lombok
query 메소드 네이밍
구분 | method | discription |
---|---|---|
Repository | findAllReviewableOrdersByUserIdWithinThirtyDays |
30일 이내의 후기 작성 가능한 주문을 유저 아이디로 모두 찾아온다. |
Service | loadAllReviewableOrdersByUserId(Long userId) |
후기 작성 가능한 모든 주문을 유저 아이디로 가져온다. |
Controller | getAllReviewableOrders |
후기 작성 가능한 리뷰들을 가져온다 |
Class
+ @Data
+ private fianl
~~sealed
와 record
의 조합을 사용한다.~~@QueryProjection
을 사용한다.Controller | URI | description |
---|---|---|
ProductController | POST /products/1/reviews | 1번 상품에 후기 작성하기 |
UserController | GET /users/1/reviews | 1번 유저의 후기 가져오기 |
ProductController | GET /products/1/reviews | 1번 상품의 후기 가져오기 |
ReviewController | GET /reviews | 모든 상품 후기 가져오기 |
// bad..!
public AjajaResponse<Type> doSomething(Param param1, Param param2, Param param3, Param param4) {
// logic...
}
// good..!
public AjajaResponse<Type> doSomething(
Param param1,
Param param2,
Param param3,
Param param4
) {
// logic...
}