Я согласен с мнением других авторов, что подклассификация типов в объектной модели SharePoint - плохая идея. Мои главные причины для этого:
- способ, которым SharePoint по сути располагает объекты в зависимости от контекста, в котором они были созданы.
- вы бы создавали иерархию типов на основе подтипов, которые не находятся под вашим контролем.
Проблема утилизации, вероятно, является самым большим сдерживающим фактором.
Наследование не всегда является лучшим решением для соблюдения принципов ОО. У иерархии объектов есть и свои недостатки, когда дело доходит до обслуживания.
Похоже, вы уже исследовали инкапсуляцию, которая является совершенно допустимым ОО-подходом и предпочтительнее наследования (на мой взгляд):
public class Order {
private SPListItem listItem;
...
public Order(SPListItem listItem) {
this.listItem = listItem;
}
...
public int ItemName {
get { return listItem["Title"] as string }
set { listItem["Title"] = value; }
}
...
}
Одна из проблем этих подходов (наследование и инкапсуляция) заключается в том, что они связывают ваши объекты с базовым хранилищем данных (в данном случае SharePoint). Это может или не может быть плохой вещью, в зависимости от того, что вы пытаетесь создать.
Альтернативный подход заключается в отделении вашего кода от основного хранилища и использовании хранилища для обработки получения и обновления объектов в хранилище. По крайней мере любое соединение с SharePoint может быть обработано одним типом репозитория, и вы можете установить интерфейс вокруг него, чтобы позволить вам использовать другие репозитории (для будущих сценариев или для тестирования).
Все зависит от вашего варианта использования и того, насколько ваш код и платформа могут измениться в будущем.
Один хороший и легкий подход - в блоге Криса О'Брайена (Простой шаблон доступа к данным для списков SharePoint) . Если ваши потребности совпадают с его, это практический путь.