私は現在、他人のコードに追加情報を追加しており、PdfSharp dllを使用しているPdfBuilderクラスに出くわしました。この時点まで、クラスはコンストラクタでBoxRequest
という型をとっています。あなたはGetText
で使用されるプロパティがFileRequest
タイプから撮影されている見ることができるように完全に異なる2つのタイプの一般的なメソッドを書く
public class PdfBuilder
{
private readonly BoxRequest _boxRequest;
public PdfBuilder(BoxRequest boxRequest)
{
_boxRequest = boxRequest;
}
public PdfDocument BuildPdfDocument()
{
PdfDocument pdfDocument = new PdfDocument();
PdfPage page = pdfDocument.AddPage();
page.Orientation = PageOrientation.Landscape;
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Arial", 40, XFontStyle.Regular);
XTextFormatter tf = new XTextFormatter(gfx);
XRect rect = new XRect(0, (page.Height/4), page.Width, page.Height);
gfx.DrawRectangle(XBrushes.White, rect);
tf.Alignment = XParagraphAlignment.Center;
tf.DrawString(GetText(), font, XBrushes.Black, rect);
return pdfDocument;
}
private string GetText()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(_boxRequest.Name);
sb.AppendLine(_boxRequest.Department);
sb.AppendLine(_boxRequest.Location.LocationName);
return sb.ToString();
}
}
:そうのように:
public PdfDocument GenerateAddressLabelPdf(int id)
{
var box = _unitOfWork.BoxRepository.GetById(id);
var generator = new PdfBuilder(box);
return generator.BuildPdfDocument();
}
そしてPdfBuilder
クラスには、次のようになります。
BoxRequest
取る見たように、私は今すぐに、
FileRequest
と呼ばれる新しいタイプのために、もう一度、この時間を、このクラスを使用する必要があります
。
これまでのところ、私はそうのようなクラスを変更しました:
public class PdfBuilder<T>
{
private readonly T _pdfType;
public PdfBuilder(T t)
{
_pdfType = t;
}
//additional class stuff
}
しかし、私は一人ひとりのために一定のラインをレンダリングする必要があるとして、今私は、私はGetText
方法は、一般的な作るべきかに関しては少し混乱していますタイプ。
この時点で私はタイプをGetText
に渡してタイプをチェックし、タイプに基づいて別のラインを追加することができると思います。
ジェネリックスは必要ありません。あなたはBoxRequestとFileRequestまたは\からインターフェイスを抽出し、それらのために別々のPdfBuilderクラスを作成する必要があります(もちろん、どちらかを継承します)。 – Evk
おそらく、すべての具体的なオブジェクトによってインターフェイスを実装することができますか? –
異なるものがすべて 'GetText'であれば、' BoxRequest'と他のクラス 'ToString'メソッドをオーバーライドし、型について気にしないでください。 'GetText()'をsthで置き換えることができます。それ以外の場合は、 'GetText()'をインタフェースに抽出して、両方のCourクラスが適切な方法で実装するようにします。 – nozzleman