FindById ()의 장점 .
미래 교정 : 당신이 시작하면 Find(int), 나중에 다른 방법 (추가 할 필요가 FindByName(string), FindByLegacyId(int), FindByCustomerId(int), FindByOrderId(int), 등), 나 같은 사람들이 찾고있는 사람이 나이를 지출하는 경향이있다 FindById(int). 별로 문제 만약 당신이 할 수있는 변경됩니다 Find(int)에 FindById(int)그것이 필요하게되면 - 미래의 교정은 이러한 관한 경우 의.
더 쉽게 읽을 수 있습니다. Find호출이 record = Find(customerId);Yet 인 FindById경우 읽기가 약간 더 쉬운 경우 완벽하게 괜찮 습니다 record = FindById(AFunction());.
일관성 . 어디에서나 FindByX(int)/ FindByY(int)패턴을 일관되게 적용 할 수 있지만 Find(int X)/ Find(int Y)는 충돌하기 때문에 불가능합니다.
Find ()의 장점
- 키스.
Find간단하고 간단하며, operator[]이와 관련하여 가장 기대되는 2 개의 함수 이름 중 하나입니다. (일부 인기있는 대안이되고 get, lookup또는 fetch상황에 따라).
- 일반적으로 함수의 기능을 정확하게 설명하는 잘 알려진 단일 단어 인 함수 이름이 있으면이를 사용하십시오. 여러 단어로 된 이름이 더 길더라도 함수의 기능을 설명하는 데 약간 더 좋습니다. 예 : Length vs NumberOfElements . 트레이드 오프가 있으며 라인을 그릴 위치는 진행중인 토론의 대상입니다.
- 중복성을 피하는 것이 일반적으로 좋습니다. 를 살펴보면
FindById(int id)중복을로 변경하여 쉽게 중복성을 제거 할 수 Find(int id)있지만 트레이드 오프가 있습니다.
또는 강력한 형식의 ID를 사용하여 두 가지 장점을 모두 얻을 수 있습니다 .
CustomerRecord Find(Id<Customer> id)
// Or, depending on local coding standards
CustomerRecord Find(CustomerId id)
구현 Id<>: C #에서 ID 값을 강력하게 입력
위의 링크뿐만 아니라 여기에 의견 Id<Customer>은 내가 다루고 싶은 여러 가지 우려를 제기했습니다 .
- 우려 1 : 제네릭의 남용입니다.
CustomerId그리고 OrderID다른 유형 (있다 customerId1 = customerId2;=> 좋은, customerId1 = orderId1;=> 나쁜), 그러나 우리는 하나이를 구현 사본을 붙여 넣거나 메타 프로그래밍으로 할 수 있도록 구현은 거의 동일하다. 제네릭을 노출하거나 숨기는 것에 대한 논의에는 가치가 있지만 메타 프로그래밍은 제네릭을위한 것입니다.
- 우려 2 : 간단한 실수를 멈추지 않습니다 ./ 문제를 찾아내는 해결책입니다. 강력한 형식의 ID를 사용하여 제거 된 주요 문제는에 대한 호출에서 잘못된 인수 순서입니다
DoSomething(int customerId, int orderId, int productId). 강력한 유형의 ID는 OP가 요청한 항목을 포함하여 다른 문제도 방지합니다.
- 우려 3 : 실제로 코드를 가릴뿐입니다. 에 ID가 있는지 알기가 어렵습니다
int aVariable. 에 ID가 있음을 쉽게 알 Id<Customer> aVariable수 있으며 고객 ID임을 알 수 있습니다.
- 우려 4 :이 ID는 강력한 유형이 아니며 랩퍼 일뿐입니다.
String그냥 래퍼 byte[]입니다. 랩핑 또는 캡슐화는 강력한 입력과 충돌하지 않습니다.
- 우려 5 : 과도하게 설계되었습니다. 내가 추가하는 것이 좋습니다 않지만 여기에 최소한의 버전입니다
operator==그리고 operator!=당신은에만 의존하지 않으려는 경우뿐만 아니라 Equals:
.
public struct Id<T>: {
private readonly int _value ;
public Id(int value) { _value = value; }
public static explicit operator int(Id<T> id) { return id._value; }
}
T Find<T>(string name)시키거나(int size)불가피한 문제를 어떻게 해결할 계획입니까?