Из этого вопроса вытекает несколько тем:
- интерфейсы против классов
- какой конкретный класс из нескольких одинаковых классов, коллекции, списка, массива?
- Общие классы по сравнению с коллекциями подэлементов ("дженериков")
Вы можете выделить, что это объектно-ориентированный API
интерфейсы против классов
Если у вас нет большого опыта работы с интерфейсами, я рекомендую придерживаться классов. Я часто вижу, как разработчики перескакивают на интерфейсы, даже если это не обязательно.
И, наконец, закончите делать плохой дизайн интерфейса вместо хорошего дизайна класса, который, кстати, в конечном итоге можно перенести на хороший дизайн интерфейса ...
Вы увидите много интерфейсов в API, но не торопитесь, если он вам не нужен.
Со временем вы узнаете, как применять интерфейсы к вашему коду.
какой конкретный класс из нескольких одинаковых классов, коллекции, списка, массива?
В C # (dotnet) есть несколько классов, которые можно менять местами. Как уже упоминалось, если вам нужно что-то из более конкретного класса, например «CanBeSortedClass», сделайте это явным образом в своем API.
Действительно ли вашему пользователю API нужно знать, что ваш класс можно отсортировать, или применить какой-то формат к элементам? Затем используйте CanBeSortedClass или ElementsCanBePaintedClass, в противном случае используйте GenericBrandClass.
В противном случае используйте более общий класс.
Общие классы коллекций по сравнению с коллекциями подэлементов ("обобщенных")
Вы обнаружите, что есть классы, содержащие другие элементы, и вы можете указать, что все элементы должны быть определенного типа.
Общие коллекции - это те классы, которые вы можете использовать одну и ту же коллекцию для нескольких программных приложений без необходимости создавать новую коллекцию для каждого нового типа подэлементов, например: Коллекция .
Потребуется ли вашему пользователю API очень специфический тип, одинаковый для всех элементов?
Используйте что-нибудь вроде List<WashingtonApple>
.
Потребуется ли вашему пользователю API несколько связанных типов?
Expose List<Fruit>
для API, и использовать List<Orange>
List<Banana>
, List<Strawberry>
внутри, где Orange
, Banana
и Strawberry
являются потомками Fruit
.
Потребуется ли вашему пользователю API общая коллекция типов?
Используйте List
, где находятся все предметы object
.
Приветствия.