2010-12-13 2 views
2

도메인 용 모델을 설계 할 때 거의 항상 .IsSomething 기능을 갖게됩니다. IsNewIsDirty은 데이터 지속성 목적으로 공통적이며 비즈니스 규칙 유효성 확인을 위해서는 IsValid, 심지어는 현재 프로젝트에서 IsFraudulent (비즈니스 규칙 유효성 검사 추가) 등이 있습니다. 다른 이들에 의해 구현 된 것을 볼 때마다 메소드로 거의 항상 수행됩니다. 그러나 나는 특별한 이유가 있는지 궁금해합니다.Model.Is ___ - Property 또는 Method 여야합니까?

나는 개체와 메서드를 설명하는 속성을 어떤 종류의 동작을 수행하는 것으로 보려는 경향이 있습니다. 이것들은 실제로 행동을 수행하지 않습니다. 코드가 호출 될 때 동적으로 결정되고 명확하게 읽기 전용이므로 코드가 관련되어 있지만 나에게는 여전히 메소드가 아닌 속성으로 적합합니다.

속성에 직렬화 문제가있을 수 있습니다. 리치 도메인 모델은 로직과 기능성을 포함하고 있기 때문에 어쨌든 잘 직렬화되지는 않지만, 서비스 경계를 ​​넘어서 뭔가를 옮길 필요가있을 때마다 일반적으로 정의 된 DTO 구조로 먼저 전개됩니다.

그러나 다른 사람들이이 주제에 대해 통찰력을 갖고 있는지 궁금합니다. 이러한 속성을 속성이 아닌 메서드로 구현할 좋은 이유가 있습니까?

은 (접선이 an answer has already been given 불구하고, 확장 성이 정말 이런 일에 일관성 도움이 될 관련. 나는. 그러나 속성은 방법 도메인 별 로직을 구현하기 위해 일반적으로 System.StringIsSomething() 확장 방법의 숫자 있는 한

경우에도 난 그냥 확장과 일관성을 위해 방법을 고수 할 수 있습니다, 이동)

+0

또는 C# 5에서 손가락을 교차하여 확장 속성을 사용할 수 있습니다. – SWeko

답변

4

:

  1. 그것은 너무 개념, 특징적인 몇 가지 방법으로 개체를 설명, 해당 속성

  2. 그것은 매개 변수를 요구하지 않습니다

  3. 기본적으로 특정 데이터를 검색하고 독립 실행 형 작업이나 수정 작업을 수행하지 않습니다.

6

을 재산에 접근한다고 가정 :.

  • 하는
  • 가 아니 부작용을 "의 reasonabl 아무것도하지 않습니다 y speedy "(예, 매우 뒤죽박죽 ...)

나는 속성을 만들지 않을 이유가 없습니다. 직렬화는 문제가되지 않습니다. 대부분의 직렬화 체계는 속성을 일시적 (즉, 직렬화되지 않음)으로 표시하는 방법을 제공합니다.

때문에이 속성을 사용
+0

부작용에 대한 좋은 지적. 지금까지 문제는 아니지만 팀원들과 다른 개발자들이 명심해야 할 사항입니다. 속성이 단순히 객체의 현재 상태에 대한 설명을 반환하는 것이 아닌 다른 일을하는 즉시 메소드가되어야합니다. – David

+0

@David : 글쎄, 그것은 그것이하는 일에 달려 있습니다. 잠재적으로 캐시 된 값을 변경하거나 ... 수행중인 작업을 기록 할 수 있습니다. 그러나 상태를 눈에 보이는 변화로 만드는 것은 나쁜 생각 일 것입니다. –

관련 문제