Вот пример простейшего компонента
<?
class SaleRecomendedProducts extend \Bitrix\iblock\Component\ElementList {
}
Плюс берете шаблон из любого подходящего наследника. Методы которые нужно - переопределяете. Если работаете через ORM со своими таблицами/сущностями то пишите свой с нуля.
Сейчас распространенная практика больше логики оставлять в модулях, а в компоненты делать достаточно тонкими.
С комплексными компонентами чуть сложнее, в доках мутно описано, я разобрался копая комплексный код компонента catalog + доки.
Вообще с доками грустновато. API D7 выпустили месяц назад, но оно на данный момент почти пустое.
https://dev.1c-bitrix.ru/api_d7/