비슷한 기능을 공유하는 여러 클래스의 이름을 지정하는 것에 대한 질문이 있습니다. 나는 과학 API에 일하고 클래스/인터페이스를 다음과 같습니다다른 이름을 가진 동일한 클래스가 여러 개있는 것이 맞습니까?
는public interface IRange<T>{
T Minimum {get;}
T Maximum {get;}
// A few other methods that aren't important
}
public class Range<T> : IRange<T> where T: IComparable<T> {
public T Minimum {get; protected set;}
public T Maximum {get; protected set;}
public Range(T minimum, T maximum) {
Minimum = minimum;
Maximum = maximum;
}
}
내 API를 들어, 내가 double
작업을 많이 (즉, Range<double>
) 범위, 그래서 나는에게 MassRange
라는 다른 클래스를했다. Range<double>
가 MzRange
라고의 나는 또한 내가 별도의 유지하지만 MassRange
로 주 모두 같은 구조와 기능이 있음을, 또 다른 유형이, 개념적으로
public class MassRange : Range<double>, IRange<double> {
public double Width { get { return Maximum - Minimum;} }
public double Mean { get { return (Maximum + Minimum)/2.0;} }
public MassRange(double mean, MassTolerance width) {
Minimum = mean - width.Value; // pseudo-code
Maximum = mean + width.Value;
}
}
:이 클래스는 또한 몇 가지 새로운 생성자와 속성 아래 그림이있다 API 그들은 똑같은 방식으로 작동하고 동일한 유형의 데이터를 저장하지만, 과학 측면에서 볼 때 서로 다르며 뚜렷합니다.
그래서 나는 DoubleRange
의보다 일반적인 이름으로 MassRange
클래스의 이름을 변경 간주하고 모두 MassRange : DoubleRange
및 MzRange : DoubleRange
을 가지고과 같이 설계 :
public MzRange : DoubleRange, IRange<double> {}
public MassRange : DoubleRange, IRange<double> {}
하지만 난 정말 이름 DoubleRange
에 대한 관심, 그리고 것하지 않습니다 내 API를 통해 공개적으로 공개하지 마세요. 동일한 기능을 가진 두 개의 다른 유형이 적절하게 노출되고 있습니까? 나는 단지 DoubleRange
에 대해 더 좋은 이름을 내고 MzRange
과 MassRange
을 잊어 버려야합니까? DoubleRange
을 내부 또는 무언가로 만들어 API를 통해 노출되지는 않지만 계속 사용할 수 있습니까?
이것은 Extension Properties의 경우 인 것으로 보이지만 현재 존재하지 않습니다.
여기에있는 내용에 분명히 동의합니다. Linq가 구현되는 방식으로 요구 사항을 구현해야합니다. 제네릭 인터페이스가 많이 있으며 많은 확장 방법이 있습니다. +1 –
이 속성에 대해 작동하지만 DoubleRange에 추가 한 새 생성자에 도움이되지 않습니다. – Moop
@Moop 그것은 당신에게 어떤 생성자도 제공하지 않지만 아마도'DoubleRange'는 어쨌든 가질 수없는'MassRange'와'MzRange' 클래스에 다른 생성자를 가질 것입니다, 맞습니까? 'MzRange'는'MzTererance'를 취합니까? 물론 정확한 요구에 따라 정적 팩토리 메서드를 만들 수는 있지만 정확히 무엇이 될 것인가라는 질문에서 완전히 명확하지는 않습니다. –