日期:2014-05-20  浏览次数:20741 次

怎麽設計這個框架呢
問題:
現在公司要 根據SAP中的數據 篩選 生成多種不同形式的財務報表.(如命名為SOG ,EXE等報表).
每种表篩選的方法是不同. [如 SOG 這種報表時根據 SAP中的一個字段{vkgrp}來進行篩選的.而EXE 這種財務報表時根據 Sap 中的三個字段來進行數據篩選的.]
篩選完數據后 處理數據生成報表.
然後給有報表接收權限人發送郵件.
另: 每种報表都要生成一份縂的報表 發給具有縂報表接收權限的人.
如 SOG 如果 vkgrp 有009 020 ,030 那么就要生成 4份 報表
 Sog-all
 Sog-009
 Sog-020
Sog-030 

而對于有多少种vkgrp 我是未知的.
 要怎樣設計,使得它有很好的擴展性.因爲後面可能會有其他形式的報表. 

以下是我設置的類 
  public abstract class Report
  {
  abstract public Email GetEmail();
  abstract public ReportStruct GetReportStruct();
  abstract public void GenerateExcelReport();  
  }

  public class OstdSOGAll:Report
  {

  public OstdSOGAll()
  {
  }
  public override Email GetEmail()
  {

  Email email = new Email();
  return email;
  }
  public override ReportStruct GetReportStruct()
  {
  ReportStruct reportSt = new ReportStruct();
  return reportSt;

  }
  public override void GenerateExcelReport()
  {
  Console.WriteLine("My Lover IS your!");
  }
  }

 public class OstdSOGSpe:Report
  {
  private string sogkey;
  public string SOGKEY
  {
  get
  {
  return sogkey;
  }
  set
  {
  sogkey = value;
  }
  }
  public OstdSOGSpe()
  {
  }
  public override Email GetEmail()
  {

  Email email = new Email();
  return email;
  }
  public override ReportStruct GetReportStruct()
  {
  ReportStruct reportSt = new ReportStruct();
  return reportSt;

  }
  public override void GenerateExcelReport()
  {
  Console.WriteLine("My Lover IS her!");
  }  
  }



------解决方案--------------------
用工厂模式
------解决方案--------------------
把手头的做好就可以了,当你考虑抽象的时候要有一个尺度,例如不要把4个礼拜之后才可能开始着手做的报表考虑进来。

你要精通重构技术,并且精通测试技术。那些不精通这些技术的人,希望靠一开始把什么架构都设计得很“完美”,但这在很多时候其实是痴心妄想的。那中追求完美架构(但是又拿不出非常复杂和清晰的架构设计)的做法,在csdn论坛,或者那些经验比较少的团队里,很多。精通重构技术可以培养你仅凭感觉就写出很好的架构,而不是靠理论分析。