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)
불가피한 문제를 어떻게 해결할 계획입니까?