제네릭 형식 매개 변수에 관한 질문이 있습니다.일반 매개 변수 유형
public void Details(long? id)
{
if (!id.HasValue) {
Error(...);
return;
}
var person = PersonRepository.Get(id.Value);
ShowPersonDetail(person);
}
의 더 가자과 :
abstract class Entity<TId>
{
public TId Id { get; private set; }
/* ... */
}
class Person : Entity<long>
{
public string Name { get; set; }
/* ... */
}
이의 내가 사람의 세부 정보를 볼 수있는 방법을 만들려는 이제 가정 해 봅시다 :
의 내가 내 도메인 모델에서 사용되는 용어의 정의는 다음 있다고 가정 해 봅시다 PersonRepository은 리포지토리의 전문어로 올바른 "강력한"형식의 id 인수 (i)를 허용하기 위해 "Get"메서드가 "자동으로"구현되도록합니다. 이 경우, long
인수).
이제 내가 사람의 ID를 GUID를을해야한다는 결정 일일 가정 해 봅시다. 필자가 원하는 것은 Person 클래스에서만 이것을 바꿀 수 있고 다른 곳에서는 자동으로 변경됩니다. PersonRepository.Get() 메서드를 편집 할 필요는 없지만 Details() 메서드를 변경해야합니다.
내가 좋아하는 뭔가를 찾고 있었다:
Details(Person.IdType id) { /*...*/ }
이 아무것도 변경 될 경우
아, 그런데,이 "세부 사항"방법은, 다른 어셈블리에 위치 할 것입니다 ...
하지만 강력하게 -typed이며 값 유형 또는 참조 유형을 허용해야합니다.
아이디어가 있으십니까?
감사합니다.
정확히는 아닙니다. 저장소 부분은 기능이 없어도 괜찮습니다. 문제는 내 도메인 모델 범위를 벗어나는 다른 방법 때문입니다. 나는 람다 식으로 뭔가를 시도 할 것이다. 감사! –