이것은 매우 기본적인 것이지만 일종의 일반적인 문제이므로 사람들의 생각을 듣고 싶습니다. 나는 기존의 MSI 파일을 가져 와서 몇 가지 표준 수정으로 업데이트하고 새로운 MSI 파일 (변경 사항이있는 이전 파일의 복제본)을 작성해야하는 상황이 있습니다.클래스 디자인 : 파일 변환 논리 및 클래스 디자인
필자는 원래의 MSI에 대한 몇 가지 공개 방법과 기본 입력 경로를 사용하여이 글을 쓰기 시작했습니다. 그들이 사용할 수 있도록 대신 생성자의 일부로서 모든 변환 로직을 넣어
var custom = CustomPackage(sourcemsipath);
custom.Duplicate(targetmsipath);
custom.Upgrade();
custom.Save();
custom.WriteSmsXmlFile(targetxmlpath);
이 더 잘 될 것이다 : 것은이 제대로 작동하려면, 통화의 엄격한 경로는 발신자에서 다음되어야한다 공개 방법으로? ,
var custom = CustomPackage(sourcemsipath, targetmsipath); // saves converted msi
custom.WriteSmsXmlFile(targetxmlpath); // saves optional xml for sms
생성자는 다음 직접 MSI 파일을 복제 할를 업그레이드하고 목표 위치에 저장 : (순서대로 호출 측이 "올바른 순서"가 무엇인지 알고 있어야하는 것을 피하기 위해). "WriteSmsXmlFile"은 항상 필요하지 않기 때문에 여전히 public 메서드입니다.
개인적으로 저는 실제로 생성자를 "do stuff"하고 싶지 않습니다. public 메서드를 호출 할 수있는 것을 선호하지만 잘못된 것으로 보입니다. 호출자가 적절한 호출 순서를 알아야한다고 가정하십시오.
대안은 파일을 먼저 복제 한 다음 복제 된 파일을 생성자에 전달하는 것이지만 클래스 자체에서이 작업을 수행하는 것이 좋습니다.
어쩌면 내가 뒤를 모두 가지고 두 클래스가 필요합니다. SourcePackage, TargetPackage 그리고 SourcePackage를 TargetPackage의 생성자로 전달 하시겠습니까?
이것은 "공장 조명"과 같은 흥미롭고 일반적인 적용 방법입니다. –
그래서 당신은 말할 수 있습니다. 특히, C#에서 최소한 Create() 메소드를 전달하기 위해서는 위임자와 함께 이것을 사용하십시오. – Dirk
감사합니다. Dirk, 귀하의 회신을 수락으로 설정했습니다. 그러나 내가 upvote를 클릭했을 때 실제로 투표를 감소 시켰는가 ?? 다시 클릭하려고하면 투표가 너무 오래되어 변경 될 수 없다고 말합니다. 나는 이미이 대답을 미리 upvoted해야하고, 다시 클릭하면 되돌아 왔음에 틀림 없다. 기묘한. 어쨌든, 철저한 답변 주셔서 감사합니다. –