12.2.8 RankItem

검색 결과를 위한 형식을 제공합시다. 이 부분은 평가 점수 순으로 정렬할 수 있어야 합니다. 따라서 IComparable 인터페이스를 구현 약속할게요. 이 부분도 파일 입출력이 가능하게 직렬화 가능한 형식으로 정의합시다.

[Serializable]
public class RankItem : IComparable<RankItem>
{
}

멤버 속성으로 사이트 정보인 Item 개체를 참조하는 속성을 추가합니다.

public Item SiteItem
{
    get;
    private set;
}

그리고 개발자 편의를 위해 사이트의 타이틀과 설명, 페이지 주소, 게시 일시, 게시자 정보, 이미지 정보를 가져오기 할 수 있게 속성을 제공합니다.

public string Title
{
    get
    {
        return SiteItem.Title;
    }
}
public string Description
{
    get
    {
        return SiteItem.Description;
    }
}
public string Link
{
    get
    {
        return SiteItem.Link;
    }
}
public DateTime PubDate
{
    get
    {
        return SiteItem.PubDate;
    }
}
public string Author
{
    get
    {
        return SiteItem.Author;
    }
}
public string Image
{
    get
    {
        return SiteItem.Image;
    }
}

평가 점수를 위한 속성도 제공합니다.

public double Score
{
    get;
    private set;
}

생성자에서는 검색 결과 사이트 정보를 갖고 있는 Item 개체와 평가 점수를 입력받아 속성을 설정합니다.

public RankItem(Item item, double score)
{
    SiteItem = item;
    Score = score;
}

검색 질의에 있는 여러 형태소를 포함하고 있는 페이지일 때 두 개의 RankItem 개체를 하나의 개체로 취합하고 점수를 합산할 필요가 있습니다. 이에 두 개의 RankItem 개체의 평가 점수를 취합하는 메서드를 제공합시다.

public void AddScore(RankItem ri)
{
    Score += ri.Score;
}

ToString 메서드를 재정의하여 페이지 주소를 반환합니다.

public override string ToString()
{
    return Link;
}

비교 메서드를 제공합시다. 비교는 점수로 합니다.

public int CompareTo(RankItem other)
{
    if (Score > other.Score)
    {
        return -1;
    }
    if (Score < other.Score)
    {
        return 1;
    }
    return 0;
}

▷ RankItem.cs

using System;
namespace RSSBrowserLib
{
    /// <summary>
    /// 순위화 아이템 개체
    /// </summary>
    [Serializable]
    public class RankItem : IComparable<RankItem>
    {
        /// <summary>
        /// 아이템 /- 가져오기
        /// </summary>
        public Item SiteItem
        {
            get;
            private set;
        }

        /// <summary>
        /// 타이틀 - 가져오기
        /// </summary>
        public string Title
        {
            get
            {
                return SiteItem.Title;
            }
        }


        /// <summary>
        /// 설명 - 가져오기
        /// </summary>
        public string Description
        {
            get
            {
                return SiteItem.Description;
            }
        }
        /// <summary>
        /// 페이지 주소 - 가져오기
        /// </summary>
        public string Link
        {
            get
            {
                return SiteItem.Link;
            }
        }
        /// <summary>
        /// 게시 일시 - 가져오기
        /// </summary>
        public DateTime PubDate
        {
            get
            {
                return SiteItem.PubDate;
            }
        }

        /// <summary>
        /// 게시자 - 가져오기
        /// </summary>
        public string Author
        {
            get
            {
                return SiteItem.Author;
            }
        }

        /// <summary>
        /// 이미지 Uri - 가져오기
        /// </summary>
        public string Image
        {
            get
            {
                return SiteItem.Image;
            }
        }

        /// <summary>
        /// 점수 - 가져오기
        /// </summary>
        public double Score
        {
            get;
            private set;
        }

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="item">아이템</param>
        /// <param name="score">점수</param>
        public RankItem(Item item, double score)
        {
            SiteItem = item;
            Score = score;
        }

        /// <summary>
        /// 점수 합산 메서드
        /// </summary>
        /// <param name="ri">합산할 다른 개체</param>
        public void AddScore(RankItem ri)
        {
            Score += ri.Score;
        }

        /// <summary>
        /// ToString 재정의
        /// </summary>
        /// <returns>페이지 주소</returns>
        public override string ToString()
        {
            return Link;
        }
 


        /// <summary>
        /// 비교 메서드
        /// </summary>
        /// <param name="other">비교 대상</param>
        /// <returns>비교 결과</returns>
        public int CompareTo(RankItem other)
        {
            if (Score > other.Score)
            {
                return -1;
            }
            if (Score < other.Score)
            {
                return 1;
            }
            return 0;
        }
    }
}