boardproject's Introduction
boardproject's People
boardproject's Issues
DTO Setter 제거
개발 내용
- 클래스 전체 setter 제거하기
3. 클래스 전체 @Setter 제거하기
Entity에는 없애는게 맞다고 생각했는데, DTO도 제거하는게 맞는 것 같아.
실제로 개발하면서 DTO에 setter를 사용한 적이 잘 없는 것 같아.
하물며, 데이터가 변경될 위험도 줄어드니 확실히 제거하는게 맞는 것 같다!
Originally posted by @phdljr in #14 (comment)
Board -> BoardResponseDto 변환 로직 추가
개발 내용
- BoardResponseDto 변환 로직을 DTO 클래스 안에 추가하기
2. Board -> BoardResponseDto 변환 로직을 Board나 BoardResponseDto에 넣기
지금보니, 구조가 조금 이상한 것 같네.
게시글 목록 조회랑 게시글 조회를 따로 생각해서 그런지 뭔가 엉킨 느낌이 드네.
변환 로직을 Board나 BoardResponseDto에 넣는게 훨씬 더 나을 거 같다!
나는 개인적으로 Entity에는 DB에 영향을 주는 코드만을 적어주는게 나아 보여서,
DTO에 넣어두면 어떨까 싶은데, 어때?
Originally posted by @phdljr in #14 (comment)
JPA의 save
무슨 역할을 할까요?
기본 키 자동 생성 전략 IDENTITY 사용
개발 내용
- 기본 키 자동 생성 전략 IDENTITY 사용
저렇게 추가하고 테스트해보니까 동작하긴 하더라!!
Originally posted by @Monacobbb in #22 (comment)
기본키 자동 생성 전략
Dto 로직분리
단일 책임 원칙에 따라 Dto에는 원칙적으로는 비즈니스 로직이 첨가되어서는 안될 것 같음
src/main/java/kr/ac/project/boardproject/dto/response/BoardListResponseDto.java
코드를 보면 로직이 포함됨
게다가 해당 DTO가 사용되는 곳이 BoardService 하나 밖에 없으므로 로직 분리가 필요할듯
@Getter
@Setter
public class BoardListResponseDto {
private int totalPageNumber;
private int currentPageNumber;
private boolean previousPage;
private boolean nextPage;
private List<Integer> pageList;
private List<BoardResponseDto> boardList;
public BoardListResponseDto(Page<Board> page) {
makePageList(page);
}
private void makePageList(Page<Board> page) {
int pageSize = page.getSize();
totalPageNumber = page.getTotalPages();
currentPageNumber = page.getNumber() + 1;
boardList = makeBoardListDto(page);
int tempEnd = (int)Math.ceil(currentPageNumber / (float)pageSize) * pageSize; // 23페이지라면 20페이지로 맞춰주기
int start = tempEnd - (pageSize - 1);
int end = Math.min(totalPageNumber, tempEnd);
previousPage = start > 1;
nextPage = totalPageNumber > tempEnd;
pageList = IntStream.rangeClosed(start, end).boxed().collect(Collectors.toList());
}
private List<BoardResponseDto> makeBoardListDto(Page<Board> page) {
return boardList = page.getContent().stream().map(board ->
BoardResponseDto.builder()
.id(board.getId())
.title(board.getTitle())
.nickname(board.getMember().getNickname())
.registerDate(board.getRegisterDate())
.hit(board.getHit())
.build()
).collect(Collectors.toList());
}
}
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.