2012-04-24 3 views
0

업데이트설계 원칙/저장소를 사용하는 패턴 데이터 변환, 및 수학 식

내가 소정 공식에 따라, IReportRepository로부터 데이터를 취득하여 데이터를 조작하고, 위험을 계산하는 RiskReport 타입을 갖는다.

RiskReport 유형이 정확한 형식으로 데이터를 가져와 데이터 조작을 수행하지 않아야한다는 인수가있을 수 있습니다. RiskReport는 수식에 따라 데이터를 계산하는 방법에만 관심을 가져야하며 IReportRepository는 RiskReport 클래스에서 요구하는 데이터 만 반환해야합니다.

IReportRepository와 RiskReport 사이에 새로운 클래스를 도입해야합니까? 현재 IReportRepository에서 반환 된 데이터는 위험을 계산하는 데 필요한 형식으로 조작되기 때문에

class RiskReport 
{ 
    private IReportRepository reportRepository; 

    public RiskReport(IReportRepository reportRepository) 
    { 
     this.reportRepository = reportRepository; 
    } 




    public decimal CalculateDataBasedOnFormula() 
    { 
     var result = from d in reportRepository.GetReportRelatedData() 
        group d by d.Id into dgp //potentially complex grouping 
        select new 
           { 
            TotalPage = dgp.Sum(x=>x.Pages) //potentially complex projection 
           }; 


     decimal risk= //use the result variable to calculate data based on complex formula not shown here 

     return risk; 

    } 
} 


interface IReportRepository 
{ 
    IEnumerable<ReportRelatedData> GetReportRelatedData(); 
} 

public class ReportRepository: IReportRepository 
{ 

    public IEnumerable<ReportRelatedData> GetReportRelatedData() 
    { 
     //return data from underlying data source 
     return new BindingList<ReportRelatedData>(); 
    } 
} 

public class ReportRelatedData 
{ 
    public int Id { get; set; } 
    public int Name { get; set; } 
    public int Pages { get; set; } 
    //... more properties here 
} 

어떤 생각이라도 좋을 것입니다!

답변

0

나는이 질문 중 하나라고 생각합니다. 당신이 1000 명의 개발자에게 1000 개의 대답을 얻을 수는 있지만 그렇다고해서 다른 클래스를 사용해야한다고 말합니다. 여기 내 정당화이다 : A "수학"-ish 클래스가 독립적으로

  • 별도의 클래스는 DRY 코드의 나머지 부분을 유지, 재사용 할 수있는 테스트 할 수
    1. 공식이 변경하면

    2. , 리팩토링은하지 않습니다 보고서 코드에 자리 잡으십시오.

    코드베이스를 상속해야한다면, 여기에 3 개의 클래스가 표시됩니다. 따라서 개발할 경우 다음 개발자에게 남겨두고 싶은 것이 있습니다.

    건배.

  • +0

    감사합니다. 신고 유형을 RiskReport 유형으로 변경했는데 귀하의 충고에 영향을 줍니까? – Pingpong

    1

    난 IReportRepository로부터 데이터를 취득 리포트 타입은, 상기 데이터를 조작, 그리고 미리 정의 된 공식에 따라 속도를 계산한다.

    답변은 첫 문장에있는 것 같습니다. 코드를 잘하려면 코드를 SOLID으로 만드십시오. "S"는 Single Responsibility Principle (단일 책임 원칙)의 약자입니다. 다시 말해, 어떤 수업이 무엇인지 설명 할 때는 "and"라는 단어를 사용하지 마십시오. 그에 따라 디자인을 변경하십시오.

    +0

    이것이 올바른 대답이라고 생각합니다. 수상한 게시물에서 언급 된 우려 사항을 분리하는 세 가지 장점은 모두 단일 책임 원칙의 직접적인 결과입니다. – theringostarrs