Interfaces play a vital role in Magento 2 development. Here’s why:
Abstraction: They decouple your code from concrete implementations, making it more flexible and adaptable to changes.
Extensibility: Interfaces promote modularity, allowing third-party developers to extend or modify functionality without affecting your core code.
Testability: Interfaces make it easier to write unit tests by allowing you to mock dependencies.
Service Contracts: Magento 2 extensively uses interfaces to define service contracts. These contracts provide a clear API for modules to interact with each other, enhancing stability.
lets start with the Cateogry class:
class Category implements CategoryInterface
<?php
declare(strict_types=1);
namespace Itcforu\Kickstart\Model;
use Itcforu\Kickstart\Api\Data\CategoryInterface;
class Category implements CategoryInterface
{
public function getName(): string
{
return 'Category Name';
}
}
note I’m using github copilot
CategoryInterface:
<?php declare(strict_types=1);
namespace Itcforu\Kickstart\Api\Data;
interface CategoryInterface
{
/**
* @return string
*/
public function getName(): string;
}
Product class:
We will use CategoryInteface insetead of the Category Model
<?php
declare(strict_types=1);
namespace Itcforu\Kickstart\Model;
use Itcforu\Kickstart\Api\Data\CategoryInterface;
class Product {
/**
* @param Category $category
*/
public function __construct(
private CategoryInterface $category,
){}
/**
* @return string
*/
function getCategoryName(): string
{
return $this->category->getName();
}
}
in the next lesson we will some xml to assign this using something called a class preference
If you have any question, please write a comment below I will try my best to help you
Thanks for watching if you see this lesson are valuable, please like and subscribe to the channel.

