오버로드 된 메서드에서 다른 반환 유형을 반환하는 모범 사례가 있습니까? 예를 들어 DAL에 Load 메서드가있는 경우 단일 항목이나 여러 항목을로드하려고합니다. 내가 접근 방법 사용할 수 있다는 것을 알고오버로드 된 메서드에서 다른 반환 유형을 사용해야합니까?
로드 하나의 객체
MyBusinessObject LoadOne(int id)
{
}
로드 여러 개체
MyBusinessObject[] LoadMany(params int[] ids)
{
}
지금 뭔가 내가 아는을 I 수 할 하나의 방법을 과부하하는 것입니다 다른 반환 유형이 있습니다. 그래서 같이 :
MyBusinessObject Load(int id)
{
}
그리고
MyBusinessObject[] Load(params int[] ids)
{
}
거기 내가이 일을 중지 아무것도 없다, 그리고는 API 관점에서 깔끔한 일을 계속 보이지만
, 이것은 좋은 생각처럼 보인다? 나는 어젯밤 그것을 가로 질러 왔고, 나 부분은 오버로드 된 메소드에 대해 일치하는 리턴 타입을 원했기 때문에 이것을하지 말아야한다고 생각한다.Load (int id) 메서드는 하나의 항목 만 보유하는 컬렉션을 반환 할 수도 있습니다. 이것은 하나의 항목이 반환 될 것으로 예상되는 경우 해당 항목을 반환해야하며 단일 항목을 포함하는 목록을 반환하면 안된다는 점에서 이는 최소한의 놀라움의 원칙을 위반하는 것으로 보입니다. 그래서 여기
는 이러한 아이디어를 둘러싼 내 충돌하는 생각입니다- 오버로드 방법은 모두 같은 유형을 반환해야합니다.
- 메서드가 동일한 작업을 수행하는 경우 동일한 메서드 이름에 여러 가지 다른 이름을 지정하지 마십시오. API 사용자의 관점에서 볼 때 더 간단하게 처리 할 수 있기 때문에 기본적으로 같은 일을하지만 매개 변수가 다른 여러 가지 방법을 통해 트래킹 할 필요가 없습니다.
- 가장 확실한 유형의 메소드를 반환합니다. 즉, 사용자가 아이템 컬렉션을 기대할 가능성이있는 경우 단일 아이템을 기대할 가능성이있는 경우 아이템 컬렉션을 반환하고 단일 아이템을 반환합니다.
그래서 두 번째 생각이 처음 것보다 중요하지만 동시에 첫 번째 생각은 프로그램 방식의 모범 사례처럼 보입니다.
이 연습을 둘러싼 모범 사례가 있습니까? 주제에 대한 다른 사람들의 생각을 듣고 싶습니다.
어쨌든 배열 대신에'IEnumerable '를 반환하는 것을 고려하십시오. 에릭 리 퍼트 (Eric Lippert)는 이에 대한 훌륭한 블로그 글을 가지고 있습니다. –
배열을 반환하면 시나리오가 강조 표시됩니다. 내 실제 코드에서 IEnumerable을 반환합니다. – BenAlabaster
좋습니다. 네가 알고있는 한. –