Мой вопрос не про создание модуля HelloWorld. И не про preference в файле di.xml.
Вот сам вопрос: как именно расширять и работать с моделями мадженты?
Приведу пример: есть модель invoice и invoice-item. Поставлена задача: сделать редактирование amounts в "инвойсах". Конечно же, сразу есть простой путь через di.xml. Но сейчас не об этом пути.
Так же есть вариант сделать свои модели (как наследники базовых) и уже с ними работать. Только в этом случае такие методы как getInvoiceCollection сразу начинают доставлять боль: хочется работать с моделями в стиле "единого языка" из ddd, но не ясно как это сделать в этом случае. Нет, есть тут один способ который особенно любят советовать на SO:
$myModel->load($originalModel->getEntityId());
Забавно что на том же SO есть совет так не делать потому что не вызываются события и вообще надо делать через репозитории.
В сторонних расширениях чуть сложнее чем вышеуказанный helloworld все делается на своих моделях. Но опять же, в половине случаев используется стандартные модули, а в половину делается $myModel->load... ну вы поняли, такое себе.
Короче, я хочу верить что есть какой-то способ разработки расширений так, чтобы можно было хоть 10 расширений для клиентского модуля поставить, и они будут нормально работать. И чтобы обязательно без всяких preference, ->load после каждого чиха и plugins.
Знаете ли вы такой способ?
Уверены, что такого нет? Скажите, это тоже важно знать.
Один и звариантов попробовать генераторы модулей вроде http://www.silksoftware.com/magento-module-creator/magento2x.php