2014-05-21 5 views
2

나는 WageInfo이라는 클래스가 있으며 EarningDeduction 클래스와 컴포지션 관계가 있습니다. 다음과 같이 그래서 ...클래스 구성이 인스턴스 변수로

class WageInfo 
{ 
    int ID {get; set;} 
    Earning E = new Earning(); 
    Deduction D = new Deduction(); 

} 

나는 EarningDeduction's 생성자에 매개 변수를 전달하는 것은 불가능하다 그래서 나는 WageInfo 생성자 내부에 이러한 객체를 초기화 havent 한 것을 알고 이것을 구현한다.

그 외의 경우, 이것이 구성으로 간주 될 수 있습니까? 이 접근법의 다른 결함은 무엇입니까?

편집 : 클래스

class Earning 
{ 
int ID {get; set;} 
Decimal Amount {get; set;} 
DateTime Period {get; set;} 

} 

class Deduction 
{ 
int ID {get; set;} 
Decimal Amount {get; set;} 
DateTime Period {get; set;} 
String Remarks {get; set;} 
} 

그리고 임 다음과 같이 이러한 속성에 액세스하는 방법에 대한

자세한 내용 ... Program.cs에서

WageInfo WI= new WageInfo(); 
WI.E.Amount= 1000; 

EDIT2 :

내 클래스의 관계는

enter image description here

WageInfo

많은 Earnings, Deduction들과 WageBalances을 가질 수있다 ... 이런 식이다. 다음과 같이 그래서 내 PrepareEarnings() WageManager의 클래스는 객체 (여기 WageInfo)를 포함하는 가 완전히 객체 (E, D)를 포함 의 라이프 사이클을 제어 할 때

public List<Earning> PrepareEarnings(DateTime wagePeriodStartDate, DateTime wagePeriodEndDate) 
     { 
      return GetEarningsToList(wagePeriodStartDate,wagePeriodEndDate); 
     } 


     public List<Earning> GetEarningsToList(DateTime startDate, DateTime endDate) 
     { 
      return CalculateEarnings(startDate,endDate).Rows.OfType<DataRow>().Select(CreateEarnings).ToList(); 
     } 

     private DataTable CalculateEarnings(DateTime startDate, DateTime endDate) 
     { 
      return _DataService.GetEarnings(startDate,endDate); 
     } 

     private Earning CreateEarnings(DataRow row) 
     { 
      WageInfo wageInfo = new WageInfo(); 

      wageInfo.Earning.EmployeeID = row[0] == DBNull.Value ? 0 : Convert.ToInt32(row[0]); 
      wageInfo.Earning.WorkDays = row[2] == DBNull.Value ? 0 : Convert.ToInt32(row[2]); 

      // 

      return wageInfo.Earning; 
     } 
+1

잘 모르겠어요이 좋은 또는 나쁜 구조의 경우 말을 충분한 정보를 제공 한 경우. 내가 개인적으로 볼 수있는 것에서는 나빠 보이지 않습니다 ... –

+0

이 모든 멤버는 비공개입니다. 그게 네가 필요한거야? –

+1

예 이것은 구성으로 간주 될 수 있습니다. 결함 관련 : 반드시 나쁜 연습은 아니므로 이러한 유형의 초기화를 수행 할 수 있습니다. 또한 매개 변수 (예 : 익명 유형)를 전달할 수 있습니다. 이게 당신이 알고 싶은 것인지 확신 할 수 없기 때문에 주석 달기 ;-) – hschne

답변

관련 문제