Я создаю сайт с управлением контентом с помощью собственного API, созданного несколькими разработчиками, с которыми я работаю. API - это просто красивый LINQ-подобный ORM-подобный слой между Sitecore CMS (нашей CMS в данном случае) и нашим кодом C # для привязки элементов данных к элементам управления. Я обнаружил, что в нескольких местах у меня была возможность выбирать между созданием методов и свойств для извлечения «подпунктов» для получения данных.
В целях объяснения терминов Sitecore предположим, что слово «шаблон» означает собственный класс, представляющий некоторый тип типа Sitecore.
// retrieve all children of the Sitecore template "Content Folder" below the PageData section
// assume PageData is an object that represents that section in the Sitecore content tree
public List<ContentFolder> GetContentFolders() {
return PageData.CurrentItem.ChildrenByTemplate("Content Folder").As(i => new ContentFolder(i));
}
Приведенный выше код выполнит некоторое LINQ в разделе PageData для получения списка подэлементов типа «Папка содержимого». Примечание : .As()
- это просто метод расширения, позволяющий легко составить список этого типа. В этом примере это, очевидно, метод. Однако должно ли это быть публичной собственностью? Э.Г.
public List<ContentFolder> ContentFolders {
get {
return PageData.CurrentItem.ChildrenByTemplate("Content Folder").As(i => new ContentFolder(i));
}
}
Что больше подходит? Они равны? Я определенно нашел четкий пример того, когда метод имеет больше смысла: любой случай, когда мне нужно передать ему параметры или где я могу перегрузить параметры. Э.Г.
public List<SupportProductItem> GetSupportProductItems() {
return GetSupportProductItems(true);
}
public List<SupportProductItem> GetSupportProductItems(bool excludeUnsetProducts) {
var productItems = CurrentItem.ChildrenByTemplate("Support Product Item").As(i => new SupportProductItem(i));
if(excludeUnsetProducts)
productItems = productItems.Where(i => i.ProductSelector.IsSet).ToList();
return productItems;
}
Случай, когда я выбрал свойство вместо метода (по моему мнению), это когда я просто проверяю что-то простое, а не извлекаю списки данных, например,
public bool IsSet {
get {
return (CurrentItem != null);
}
}
Вместо:
public bool IsSet() {
return (CurrentItem != null);
}
Итак, в коде это будет выглядеть так:
...
if(ContentFolder.CurrentItem.IsSet) {
// code
}
...
Есть ли другие соображения, которые следует учитывать, кроме перегрузки и личных предпочтений, при выборе между методом и свойством? Что-нибудь «техническое», что я должен рассмотреть?