FishingTree 08.07 ~ 09.07

2009/07/06 13:35

보호되어 있는 글입니다. 내용을 보실려면 비밀번호를 입력하세요.


[GrenTalk] 설계..

design patterns 2009/06/27 01:59


ㅁ: Me2Day등의 openAPI를 활용해서 별다른 서버사이드언어의 도움없이 메신져를 구현
ㅁ: Observer Pattern, Strategy Pattern의 복습을 목표로 함


room: 글 ( 채팅창의 방 개념 )
comment: 댓글 ( 실제 대화 )














로그인 후 > 방 개설 > 대화창
                > 방 입장  > 대화창   의 심플한 구조로 설계


* 누가 접속해서 방을 만들건 방은 따로 준비해둔 공용 ID로 생성 : List Viwer단계에서도 공용ID로 개설된 글 목록을 받아옴


---------------------------------------------------------------------------------------------------------------------------------------------------------------

클래스의 대략적인 구조로는....

- me2Day의 데이터를 긁어와서 최신글 이나 최신댓글을 갈무리하여 등록된 Observer에게 보내줄Me2DayData_on_TimerInterval

- 입력된 데이터를 가지고 방목록 및 대화 내용을 최신내용으로 update 할 GrenOutputWindow

- viewState가 변경될때마다 옵저버를 update시킬 GrenViwer

- 입력창을 통해 새글밑 새 댓글을 등록하면 me2Day에 해당내용을 전송할 GrenSender



이정도일듯 하고... 각각의 역활로는...

Me2DayData_on_TimerInterval [  IObserverable, ISubject  ]
- IObserverable
  update( str:String );     "roomList" or "talk"
  :실제 viewer에서는 댓글이나 새글 둘중의 하나의 정보만 필요하기때문에
   전달 받은 파라미터에 따라 최신 글을 받아와서 분석하는 Behavior나
                                               최신 댓글을 받아와서 분석하는 Behavior를 동적으로 변경

- ISubject
addObserver, removeObserver,
notify():void
{
       $O.update( string );  // 지정된 Behavior에 따라서 얻어진 최신 StringData를 옵저버에 전달
}




GrenOutputWindow[  IObserverable  ]
- IObserverable
  viewState: "roomList" or "talk"
  update( str:String ); 받아온 string을 현재 ViewState에 따라 방 리스트를 업데이트 시키는 Behavior이나
                                                                                                대화내용을 업데이트 시키는 Behavior 에 전달
 



GrenViewer[ ISubject ]
- ISubject
사용자가 ListView <- ->  TalkView 사이를 전환할때마다
등록된 옵저버(  GrenOutputWindow,  
Me2DayData_on_TimerInterval)에게 notify !!





GrenSender [ ISendable, IObserverable ]
- ISendable
- send( str:String );
 정해진 Behavior에 따라 새글및 새 댓글을 등록

- IObserverable
 update( str:String ); "roomList" or "talk"
 파라미터에 따라 Sendable에서 사용할 Behavior변경

 // 헉.. 헉.. 일단 오늘 얘기 한것들.. 정리한다고 했는데.ㅡㅡ 빨리 UMLTool을 손에 익혀야지..
    이렇게 쓰려니 쓰는 사람이나 보는사람이나 고생일듯...
    오늘 얘기 안한부분도 적다보니 필요할것 같아서 넣었는데... 의견 달아주셈.

저작자 표시 비영리 동일 조건 변경 허락
Trackback 0 : Comment 0

[Strategy Pattern]

design patterns 2009/06/19 10:34
헤드퍼스트 디자인패턴
알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트레티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

: 뭐 전략패턴인만큼 어떤 상황에 대한 전략, 전술, 알고리즘 등의 단어로 대변될 수 있는 행동을 제어하는 역활을 한다고 생각됩니다.

적용 예 및 사례
들은것을 정리해보자면.

우리가 사용하는 각종 운영체제도 하나의 스트레티지 패턴의 예라고 볼수 있다.
운영체제는 일련의 API를 정의하고 해당 프로그램들은 그 API맞추어 각자의 프로그램을 구성한다.

추가적으로 책에서 많이 다루고 있는 게임에 대한 예가 자주 들어서 그런지 제일 생각이 많이난다.



비행슈팅게임이라하면 각 객체마다 고유의 속도 움직임 패턴 무기의 종류 같은것에 대한 경우의 수가 많이 존재하기 때문에 충분한 필요성을 느끼게 되는데.. 내가 직접 회사에서 만드는 프로젝트에서 그런경우를 찾는게 숙제일것 같다.
사실 지금 저 패턴을 적용하면.. 아직 부족한 생각일지는 몰라도 배보다 배꼽이 큰 상황이 일어나는....

현재 쓰이고 있는 것들을 보면서 생각해보니.. 많은 가젯, 위젯들이 그 Strategy Pattern의 사용예가 아닐까 생각된다.
http://now.sprint.com/widget/

위의 상황과 같이
MVC패턴에 View해당하는 부분이 Strategy객체가 되는 상황이 많다고 하셨는데..
뭐 사실 줏어들은 얘기로 시작을 해보자면 자명종이 있다면.

                                                                      * IAlarmable 
                                                                      * ITickable
뭐 맞는 단어인지는 모르겠지만.. ㅋㅋ
알람을 맞췄을때 실행되는 사운드와 똑딱똑딱처럼 시계가 진행중일때 나는 사운드에 대한 알고리즘이 필요하다면..

위에 인터페이스를 상속받아서 각자의 사운드를 구현하면 된다는 것이다.
알람 소리는 나지만 시계 진행소리는 나지 않는 조용한 시계도 나올수 있겠고,
괘종시계처럼 알람소리엔 큰 소리를 넣어주고 진행되는 소리에도 상황에 맞는 사운드를 넣어주는등..

호스트측에서는 이 녀석들이 IAlarmable, ITickable의 인터페이스만 구현했으면 Behavior로 설정해서 실행되게끔 유도만 해주면 되는 방식이라 할수 있겠다.

내가 실무에서 사용하게 되는 방식에는 뭐가 있을까.. 하고 생각해보니..
뭐 사실 내가 만드는것의 대부분은 네비게이션이므로..
한번 되든 안되든 적용해보자면
네비게이션에서의 공통된 행동들이라면 메인에 오버시 add 아웃하면 remove 해주는 기능
그리고 변경되는 행동들을 캡슐화 해보자면 InBehavior, outBehavior 정도..
그렇다면 두 인터페이스를 구현한 서브메뉴만 만들어 놓으면..
메인에서는 호출만 해주고..
어떤경우에는 페이드인 페이드 아웃, 또 어떤경우엔 슬라이드.. 줌인 줌아웃등.. ( 이거 쓰다보니 키노트나 파워포인트의 트랜지션도 이에 해당되는듯...) 의 것을 입맛대로 구현해놓으면 된다.

클라이언트가 "이거 이렇게 나오지 말고 이래저래해서 요래 나오게 해주세요." 라고 수정이 들어와도
호스트 코드는 손댈필요없이 서브쪽에 행동에 관한 모션들만 수정해주면 된다는...

말처럼 쉬울지..  그 이전에 사실 이곳에 적용해보는게 맞을지는...
직접 만들어봐할듯.. ㅡㅜ..

왜 스트레티지 패턴을 사용할까?
* 공통된 행동들을 한곳에서 제어하게 되므로 관리및 변경을 용이하게 하기 위해서
* 추상층을 둠으로 일련의 인터페이스만 지켜주면 호스트코드와는 별개로 수정이 가능
* 때문에 호스트코드와는 독립적으로 동적인 알고리즘 변경이 가능해진다.
저작자 표시 비영리 동일 조건 변경 허락
Trackback 0 : Comment 1
◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [25] : NEXT ▶