어제 이와 같은 시스템을 구현하기 시작했습니다.
Id , ActorId , TypeId , Date , ObjectId 속성 과 추가 Details 키 / 값 쌍 의 해시 테이블을 사용 하여 StreamEvent 클래스를 만들었습니다 . 이것은 데이터베이스에서 StreamEvent 테이블 ( Id , ActorId , TypeId , Date , ObjectId ) 및 StreamEventDetails 테이블 ( StreamEventId , DetailKey , DetailValue )로 표시됩니다.
ActorId , 유형 ID 및 ObjectId가 주체 - 동사 - 개체 이벤트가 캡처 (나중에 쿼리) 할 수 있도록. 각 작업으로 인해 여러 개의 StreamEvent 인스턴스가 생성 될 수 있습니다.
그런 다음 각 유형의 이벤트 (예 : LoginEvent , PictureCommentEvent)에 대한 StreamEvent의 하위 클래스를 작성했습니다 . 이러한 각 서브 클래스에는 PictureId , ThumbNail , CommenText 와 같은 컨텍스트 별 특성이 있습니다. 실제로 해시 테이블 / StreamEventDetail 테이블에 키 / 값 쌍으로 저장되는 (이벤트에 필요한 것)이 있습니다.
데이터베이스에서 이러한 이벤트를 다시 가져올 때 팩토리 메소드를 사용합니다 ( TypeId 기반). 가져올 )를 사용하여 올바른 StreamEvent 클래스를 작성합니다.
StreamEvent의 각 하위 클래스 에는 전달 된 StreamContext를 기반으로 이벤트를 화면에 출력 하는 Render ( context As StreamContext ) 메서드가 있습니다. 클래스를 있습니다. StreamContext 클래스를 사용하면 뷰의 컨텍스트에 따라 옵션을 설정할 수 있습니다. 예를 들어 Facebook을 보면 홈페이지의 뉴스 피드에 각 작업에 관련된 모든 사람의 이름과 프로필 링크가 나열되어 있지만 친구의 피드를 보면 이름 만 볼 수 있지만 다른 배우의 이름 만 볼 수 있습니다. .
아직 집계 피드 (Facebook 홈)를 구현하지 않았지만 UserId , StreamEventId 필드가 있는 AggregateFeed 테이블을 생성한다고 가정 합니다. 일종의 'Hmmm, 당신은이 흥미로운 것을 찾을 수 있습니다'알고리즘을 합니다.
모든 의견은 대단히 감사하겠습니다.