2011-11-03 11 views
3

저는 리피터에 바인딩하여 객체 콜렉션을 표시하기 위해 작은 asp.net 웹 페이지를 작성했습니다.이 상황에서 가장 좋은 방법은 무엇입니까?

기본적으로 내가 만든 클래스는 '테스트'라고 부르겠습니다. 정수 데이터 유형 인 가격 속성을가집니다.이 유형의 사용 제한을 무시하고 예제로 사용하고 있습니다. 그러나 통화 및 올바른 소수 자릿수 등을 표시 할 수 있도록이 속성의 서식을 지정하려고합니다.

개체에 대해 서식이 지정된 문자열을 반환하는 클래스 내에서 함수를 사용하는 것이 가장 좋습니다 내 웹 양식의 백 엔드에있는 함수는 객체에 대한 연산을 수행하고 서식이 지정된 문자열을 반환합니다.

나는 클래스가 그것의 모든 상대적인 기능을 포함해야한다고 들었지만, N-tier 앱의 프리젠 테이션 레이어에 프리젠 테이션을 보관해야한다는 말을 들었다.

내 상황에서 어떤 접근 방식이 가장 좋을까요? (그리고 내가 충분히 명확하게 설명하지 않은 경우 사과!)

고마워!

+0

이것은 도우미 방법이어야합니다. 당신이 이야기하는 상황은 일반적으로 알려진 형식을위한 것이므로, 나는 그러한 일반적인 메서드를 유지하고 그 헬퍼 클래스의 메서드를 사용하여 형식화 된 문자열을 가져 오는 도우미 클래스를 만들 것이다. 도우미 메서드에 대한 입력 값은 데이터 인스턴스에서 직접 제공되어야합니다. 이러한 형식 지정 방법을 데이터 클래스에 추가하면 1 단계에서 데이터 클래스의 오염을 방지 할 수 있습니다. 다른 데이터 멤버에 대한 서식 지정 방법을 추가하려는 유혹을받을 수 있습니다. 'toCurrency' 등을 거기 밖으로 유지하십시오. 그냥 내 생각! – Zabba

답변

2

제 생각에는 두 옵션 모두 OO 관점에서 유효합니다.

  • 가격이기 때문에 (즉, 단지 잘못된 데이터 유형이하는 일이), 데이터 클래스로 서식을 넣어 의미가 있습니다. 다른 종류의 사용자 인터페이스를 개발하면 웹 인터페이스에만 해당되는 것이 아니며이 형식을 다시 요구할 가능성이 큽니다.

  • 한편, 프리젠 테이션 문제이므로 프리젠 테이션 레이어에 넣는 것이 좋습니다.

+0

나는 이것이 내가 혼란스러워지고있는 이유다고 생각한다, 하아! – alimac83

1

일반적인 OOP 항목의 경우 개체가 구현 세부 정보를 노출하지 않아야합니다. 나는 이것을 가능한 한 세터와 getter를 피하는 것으로 해석하도록 선택한다.

질문의 맥락에서, 당신은 포맷 된 가격을 포함하는 문자열을 반환 getPriceDisplay() 메서드가 좋습니다.

포맷의 실제 구현은 구현 세부 사항에서 숨겨져 있습니다. 포맷팅, 백엔드 호출 등을 사용하는 일반적인 함수를 제공 할 수 있습니다. 이러한 세부 사항은 '테스트'개체의 소비자에게 아무런 차이가 없어야합니다.

+0

getPriceDisplay() 함수가 'Test'클래스 내에 있어야한다고 생각하십니까? 또는 내 웹 양식의 코드 뒤에? 'Test'수업에 넣는 것이 더 합리적이라고 생각하지만 잘 모르겠습니다. 어쨌든 당신의 도움을 주셔서 감사합니다 :-) – alimac83

+0

가격이 테스트 내에 저장되는 방식은 구현 세부 사항입니다. 가격이 통화 표시 값으로 형식화되는 방법은 구현 세부 사항입니다. 둘 다 Test 클래스 또는 Test Model 클래스의 프레젠테이션 계층 클래스에 속합니다 (Heinzi 언급). – DwB

1

비록 이것이 OOP 방식은 아니지만, 제 생각에 이것은 확장 방법에 좋은시기입니다. 통화 형식이 .ToCurrency()이라면 ... 원한다면 Web.Config 파일에서 가져올 수 있습니다.

가 정교하게 편집, 단순히 .ToString("your-format")이 확장 방법 (물론이 같은 간단한 특정 질문에 대한 .ToString("C")로 될 수있다)를 호출 할 것이다. 이렇게하면 한 곳에서 UI를 통해 형식을 변경할 수 있습니다. 웹 응용 프로그램에서 DateTime 형식을 처리 할 때 매우 유용하다는 것을 알았습니다.

+0

실제로 _ _think_ .net은 .ToString() 메소드를 사용하여 통화로 변환 할 수 있지만 100 % 확신 할 수는 없습니다. 나는 실제로 통화로 변환하는 방법을 찾으려 고하지 않았습니다. 단지 예제로 사용했지만 감사합니다! :-) – alimac83

+0

@ alimac83 당신이 옳다면, .ToString ("your-format")을 사용할 수 있으며 내 제안은 실제로 확장 메서드 아래에서 그것을 사용하는 것입니다. 어떤 이유로 든 형식을 변경해야하는 경우이 방법을 사용하면 확장 메서드를 호출하게됩니다. – Craig

0

.ToString("C");하지 않으시겠습니까? 이것은 제가 상상할 수있는 프리젠 테이션 레이어에있을 것입니다.

관련 문제