З цього питання випливають деякі теми:
- інтерфейси та класи
- який клас, з декількох однакових класів, колекція, список, масив?
- Загальні класи по колекціях субітемів ("generics")
Ви можете підкреслити, що це об’єктно-орієнтований API
інтерфейси та класи
Якщо ви не маєте великого досвіду роботи з інтерфейсами, рекомендую дотримуватися класів. Я бачу багато разів, коли розробники стрибають на інтерфейси, навіть якщо це не потрібно.
І, нарешті, зробити поганий дизайн інтерфейсу замість хорошого дизайну класу, який, до речі, з часом може бути перенесений на хороший дизайн інтерфейсу ...
Ви побачите безліч інтерфейсів в API, але не поспішайте з ним, якщо він вам не потрібен.
Ви з часом навчитеся застосовувати інтерфейси до свого коду.
який клас, з декількох однакових класів, колекція, список, масив?
У c # (dotnet) є кілька класів, які можна змінювати. Як уже зазначалося, якщо вам потрібно щось із більш конкретного класу, наприклад, "CanBeSortedClass", то зробіть це явним у вашому API.
Чи дійсно вашому користувачеві API потрібно знати, що ваш клас можна сортувати або застосувати до елементів певний формат? Потім використовуйте "CanBeSortedClass" або "ElementsCanBePaintedClass", інакше використовуйте "GenericBrandClass".
В іншому випадку використовуйте більш загальний клас.
Загальні класи колекцій проти колекцій підтеми ("generics")
Ви виявите, що є класи, які містять інші елементи, і ви можете вказати, що всі елементи повинні бути певного типу.
Загальні колекції - це ті класи, які ви можете використовувати одну і ту ж колекцію для декількох програм коду, не створюючи нової колекції, для кожного нового типу підпункту, наприклад: Збірник .
Чи потрібен вашому користувачеві API дуже специфічний тип, однаковий для всіх елементів?
Використовуйте щось подібне List<WashingtonApple>
.
Чи буде потрібно вашому користувачеві API кілька пов’язаних типів?
Expose List<Fruit>
для API, і використовувати List<Orange>
List<Banana>
, List<Strawberry>
всередині, де Orange
, Banana
і Strawberry
є нащадками Fruit
.
Чи потребує ваш користувач API колекцію загального типу?
Використовуйте List
, де всі предмети object
.
Ура.