본문 바로가기

DevStory

database를 쓰지 않고..

음..

//내용을 좀 변경해보자..

카테고리와 글이 있다. 게시판에서..
한 카테고리에는 여러개의 글이 올라 갈 수 있다.

게시판에 등록된 하나의 카테고리를 보면 그 카테고리안에 들어있는
글 리스트를 볼 수 있다.

여기까지만 생각하면, Category객체가 자기에 속한 글 객체 리스트를 가지고 있으면
보여주는 것이 가능하다.

그러면 반대로 하나의 글을 봤을 때 그 글이 속한 카테고리를 보고 싶을 땐..?

글 객체도 자기가 속한 카테고리의 객체를 가지고 있어야 하는건가?

그렇다면 두 객체가 상호 참조를 하게 되는데...

그렇지 않다면 어떻게 해줘야 하는 걸까..

//여기까지가 첫번째 글 쓸 때의 고민.


--
서로가 서로에게 관련 되어 있는 객체를 들고 있는 것은 방법이 아닌 것 같다.
서로 밀접하게 관련되는 것이야 그렇다고 치더라도
글이 삭제 되거나 카테고리가 삭제 된다면?

글에 댓글을 달 수 있게 해야 한다면?
그럼 글 클래스에 또 댓글 리스트를 추가해야 하나..

스토리지의 역할을 하는 클래스를 만들어서
그것이 복잡한 것들을 처리하게 해보자.

각각의 객체에 대해 고유한 키를 발급하여 중복된 객체가
생성되지 않도록 하고
생성된 객체들의 리스트를 관리한다.
예컨데..

Map<String,Category> categories = new...
Map<String,Article> articles = new ...

그럼 각각의 객체는 하나의 클래스에서 관리가 되는데
그렇다면..
맨 처음의 고민이었던, 하나의 카테고리에 속한 글 리스트 보기..
이 글이 속한 카테고리 보기는 어떻게 구현하면 될까?

 1. 각각의 객체가 관련된 객체를 들고 있는 것이 아니라, 관련된 객체의 키를 들고 있는다.
예를들면 카테고리 객체는 자기한테 등록되어 있는 article 객체의 키를 가지고 있고
article은 자기가 속한 category의 키를 가지고 있는디ㅏ.

스토리지에 Category getMyCategoy(Article article) 이렇게 인터페이스를 만들었다고 할 때
스토리지 클래스가 내부적으로 article에서 카테고리 키를 가져와 자기가 소유하고 있는
Map<String,Category> categories에서 Category를 가져와 리턴해준다.

여기서 category가 없거나 하는 등등의 처리도 같이 해준다.

2. 각각의 객체는 자기와 관련된 아무것도 들고 있지 않는다.
모든 것은 스토리지 클래스가 관리한다.
예컨데..
Map<String,Category> categories = new...
Map<String,Article> articles = new ...
외에도 관계를 형성하고 있는 모든 것들을 관리한다.

Map<String, List<Article>> articlesInCategory <카테고리 키, 글리스트>
Map<String,Category> categoryInArticle <아티클 키, 카테고리>

이런식으로 ... 그래서 만약에 스토리지에 Category getMyCategoy(Article article)
이렇게 요청을 하면 article에서 키를 가져다가 위 categoryInArticle 에서
해당되는 Category를 주면 된다.

그러면..카테고리를 생성 할 때 키를 받아오고 카테고리를 객체를 하나 생성해서
스토리지에 addCategory 이런식으로 해야하나?

아니면 스토리지에 카테고리 이름만 던져주면 지가 알아서 키 받아오고
중복 체크도 하고 그래야 하나... 키 롤백은 어떻게 구현하지?

어떤게 더 좋은 방법이지...?

그리고 더 좋은 방법이 있낭..

//일단 여기까지..;;;