2010-03-01 4 views
4

서비스 지향 응용 프로그램을 사용하는 경우 우리는 종종 비즈니스 유형을 식별/쿼리하기 위해 시스템 유형을 사용합니다.강력한 형식의 엔터티 식별자

IList<Product> GetProductsByUserAndCategoryId(int userId, int categoryId); 

그러나 우리는 "사용자 식별자"가 아닌 "카테고리 식별자"아닌 다른 식별자를 통과, 아니면 메소드 호출에 ID를 반전하는 개발자와 방지 할 수 없습니다.

IList<Product> GetProductsByUserAndCategoryId(UserId userId, CategoryId categoryId); 

GetProductsByUserAndCategoryId(new UserId(123), new CategoryId(456)); 

당신이 이것에 대해 어떻게 생각하십니까 :

그래서 해결책이 같은 식별자를 입력 강하게 사용할 수 있나요? 장점과 단점 ?

답변

3

장단점

글쎄, 우선, 이것은 유효성 검사의 순간 만 이동합니다. 바람직하게는 UserId (...)이 인스턴스화되는 즉시 발생해야합니다. 또한 이것이 시스템에 실제로 어떤 이점이 있는지 여부를 확인해야합니다.

한편, I do은 모호한 숫자 사이의 모호성을 없앰으로써 버그를 방지한다고 생각합니다. 동일한 유형을 int과 완전히 관련없는 두 가지로 표시하면 일 수 있습니다.

최근 코드 리뷰 (대학 과정)에서 학생들이 실수로 한 실수는 잘못된 방식으로 정수를 사용하는 것이 었습니다. 귀하의 예에서와 같이 다른 유형을 사용하면 이러한 오류의 원인을 효과적으로 막을 수 있습니다.

요약하면 나는 블랭킹 된 대답이 있다고 생각하지 않지만 나는 일반적으로 그러한 관용구를 선호한다.. 이는 엄격한 유형 시스템의 실질적인 이점 중 하나입니다.

1

나에게 유일한 실수는 여분의 코드를 입력해야한다는 것입니다. 코드는 더 엄격하게 정의됩니다. 이는 좋은 일이지만 실제로는 실제로 작성하는 데 추가적인 마찰이 따르게됩니다. 나중에 여분의 시간과 노력을 들여서 유지 보수와 의존성을 줄이면됩니다.

모든 방법론과 동일합니다. TDD 직원들은 코드를보다 안정적이고 쉽게 유지 보수 할 수있는 희망을 가지고 스캐 폴딩 및 테스트를 앞장서 서 시간을 보냅니다. - 그들 중 많은 사람들이 시간을 최우선으로 생각한다고 말합니다 ... 그러나 나는 의심이 있습니다. -

궁극적으로 저는 Mr. Rudolph와 동의합니다. 이것이 엄격한 유형 시스템의 강점입니다. 이점을 이용하십시오.

관련 문제