나는 MigraDoc을 사용하여 pdf 문서를 만듭니다.어떻게 이것을 공장/추상 공장으로 변환 할 수 있습니까?
MigraDoc에서 사용 된 것과 유사한 비즈니스 엔티티가 있습니다.
createRenderer를 들어 var document = new Document();
var section = document.AddSection();// section is a page in pdf
var page = GetPage(1); // get a page from business classes
foreach (var content in page.Content)
{
//var renderer = createRenderer(content); //
// get Renderer based on Business type ??
// renderer.Render(section)
}
() 내가 스위치를 사용할 수 있습니다 내 비즈니스 로직에
public class Page{
public List<PageContent> Content { get; set; }
}
public abstract class PageContent {
public int Width { get; set; }
public int Height { get; set; }
public Margin Margin { get; set; }
}
public class Paragraph : PageContent{
public string Text { get; set; }
}
public class Table : PageContent{
public int Rows { get; set; }
public int Columns { get; set; }
//.... more
}
는
public interface IPdfRenderer<T>
{
T Render(MigraDoc.DocumentObjectModel.Section s);
}
class ParagraphRenderer
: IPdfRenderer<MigraDoc.DocumentObjectModel.Paragraph>
{
BusinessEntities.PDF.Paragraph paragraph;
public ParagraphRenderer(BusinessEntities.PDF.Paragraph p)
{
paragraph = p;
}
public MigraDoc.DocumentObjectModel.Paragraph Render(MigraDoc.DocumentObjectModel.Section s)
{
var paragraph = s.AddParagraph(); // add text from paragraph etc
return paragraph;
}
}
public class TableRenderer : IPdfRenderer<MigraDoc.DocumentObjectModel.Tables.Table>
{
BusinessEntities.PDF.Table table;
public TableRenderer(BusinessEntities.PDF.Table t)
{
table =t;
}
public MigraDoc.DocumentObjectModel.Tables.Table Render(Section obj)
{
var table = obj.AddTable();
//fill table based on table
}
}
내가 같은 PDF 페이지를 생성 할 각 유형에 대한 클래스를 렌더링있다 case/사전 및 return 유형.
유형에 따라 렌더러를 일반적으로 가져 오거나 만들 수 있습니까?
여기 공장이나 초록 공장을 어떻게 사용할 수 있습니까?
또는 어떤 디자인 패턴이이 문제에 더 잘 맞습니까?
pls는 설명 할 수 있습니까? 내 상황에 기사를 매핑 할 수 없습니다. – Amitd
다음은 동일한 개념을 사용하지만 유형 이름을 키로 사용하는 팩토리의 예입니다. 제네릭 인터페이스를 제네릭 인터페이스로 대체해야합니다. 공장에서 여분의 paremeter를 전달해야 생성자를 채울 수 있습니다. 공용 클래스 – arturomonriv