문제

페이지의 좌표를 식별하는 기능이 있는데 이를

Dictionary<int, Collection<Rectangle>> GetDocumentCoordinates(int DocumentId)

그러나 나중에 각 페이지에 대한 정보가 필요합니다. 유효성이 검증된 경우 페이지 해상도, 색상/bw 등은 무엇입니까?다른 함수를 만들고 이전 함수와 거의 동일한 결과 집합을 실행하여 해당 정보를 얻을 수 있습니다.

Dictionary<int, PageInfo> GetDocumentAttributes(int DocumentId)

또 다른 대안은 ref 매개변수를 사용하여 이 값을 다시 가져올 수 있습니다.

Dictionary<int, Collection<Rectangle>> GetCoordinates(int DocumentId, ref Dictionary<int, PageInfo> PageAttributes)

또 다른 대안은 사전과 페이지 정보를 포함하는 포괄적 클래스를 만드는 것입니다.

class DocumentInfo
{
    Dictionary<int, Collection<Rectangle>> Coordinates { get; set;}
    Dictionary<int, PageInfo> PageAttributes { get; set; }
}

그런 다음 다음을 정의합니다.

DocumentInfo GetDocumentInfo(int DocumentId);

나는 마지막 옵션을 선택하고 있지만 귀하의 통찰력에 매우 감사드립니다.

도움이 되었습니까?

해결책

마지막 옵션이 확실히 최고입니다.여러 의미를 지닌 복잡한 데이터를 가져오거나 반환할 때 이 데이터를 캡슐화하는 복잡한 유형을 만드는 것이 여러 가지 이유로 모범 사례라는 것을 알았습니다.

첫째, 설계 변경에 따라 반환 데이터도 변경될 수 있습니다.이 데이터를 개체에 캡슐화하면 개체가 전달하는 내용과 메서드를 변경하지 않고도 이 데이터에 대해 메서드가 작동하는 방식을 변경할 수 있습니다. 인터페이스 당신의 물건의.분명히 데이터 개체는 인터페이스를 구현해서는 안 됩니다.기껏해야 최소한의 인터페이스를 갖춘 기본 클래스를 갖고 그 기본 클래스에 대한 참조를 전달합니다.

둘째, 데이터에 대한 유효성 검사를 수행해야 할 정도로 데이터가 복잡해지는 것을 발견할 수 있습니다.이 데이터에 대해 작업을 수행하는 클래스의 모든 메서드에서 이 유효성 검사를 수행하는 대신 데이터 클래스에서 이를 쉽게 래핑할 수 있습니다.단일 책임 등

다른 팁

많은 데이터가 필요한 것 같습니다. 마지막 옵션은 정상이어야하며 확장 가능합니다. 당신이 원했던 것입니다 (단순화하기 위해 Dictionary<,> 사용법), 당신은 물건을 조금 더 캡슐화 할 수 있지만, c#이 이름 지정된 특성을 직접 지원하지 않는다는 사실은 다음과 같은 메소드로 랩핑하지 않는 한 몇 가지 클래스가 필요하다는 것을 의미합니다.

class DocumentInfo {
    Dictionary<int, Collection<Rectangle>> rectangles = ...
    public Collection<Rectangle> GetRectangles(int index) {
        return rectangles[index]; // might want to clone to
                                  // protect against mutation
    }
    Dictionary<int, PageInfo> pages = ...
    public PageInfo GetPageInfo(int index) {
        return pages[index];
    }

 }

나는 무엇을 명확하지 않습니다 int 그렇습니다. 이것이 합리적인지 여부를 말할 수 없습니다 (그래서 방금 내버려 두었습니다).

또한 - 첫 번째 옵션을 사용하면 아마도 필요하지 않을 것입니다. ref - 사용하기에 충분합니다 out.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top