2011-12-22 2 views
2

문서 클래스를 사용하고 있습니다. 처음에는 New(), Open(), Save()와 같은 메서드가있는 공용 파일을 사용했습니다.Document 클래스를 모델링하는 방법은 무엇입니까?

New() 및 Open()은 IDocument를 반환합니다. 저장하면 아무 것도 반환하지 않습니다. 위 그림에서 알 수 있듯이. 내 프로그램에서

enter image description here

, 그것은 XML 또는 zip 파일 확장자를 사용해야합니다. xml 파일에는 문제가 있지만 모든 메서드가 있습니다. 하지만 zip 파일에 문제가 있습니다. 프로그램에서 Open()을 실행하면 zip에서 모든 xml 파일을 추출하고 모든 파일을 반환 할 때이 작업을 수행하려고했습니다. 하지만 내 Open()은 문서 만 반환합니다.

CanExtract()라는 또 다른 속성을 만들 계획 이었지만 어쩌면 좋은 생각이 아닙니다. 나는 단지 좋은 디자인을 만들고 이해할 수 있기를 원합니다. 그런 다음

public IEnumerable<IDocument> Open() 

대신

public IDocument Open() 

을 당신이 XML을 열 때를 ​​IEnumerable 1 IDocument를 포함하고 당신이 할 수있는 반환 파일 :

+0

[System.IO.Packaging 네임 스페이스에있는 Open Packaging Convention (영문)] (http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx)을 보았습니까? 이 두 상황을 상당히 잘 처리합니다. – user7116

+0

@sixlettervariables 와우, 재미있을 것 같습니다. 그래서, 내가하고있는 일이 필요 없다고 생각하니? – Darf

+0

나는 구걸하고, 빌리고, 훔치는 동료 야. 'System.IO.Packaging'을 직접 사용하는 것을 거부한다면, 그들의 모델이나 적어도 그들의 관용구를 채택 할 수 있습니다. – user7116

답변

5

변경하여 열기() 함수는 IEnumerable을 IDocument의 반환 그걸 사용하십시오. zip 파일을 열면 zip 파일의 모든 파일이 IEnumerable의 IDocuments로 반환됩니다.

0

반환 속성을 목록으로 변경하는 것이 좋습니다. 그런 다음 하나 또는 20 개의 파일이 반환되었는지 여부와 관계없이 동일한 코드로 문서 목록을 처리 할 수 ​​있습니다.

여러 파일을 허용하는 만들기 및 저장을위한 오버로드를 추가 할 수 있으며 이러한 오버로드가 사용되는 경우 자동 압축을 수행 할 수 있습니다.

관련 문제