When it is good to use viewModel ? What is difference between viewModel and Block?
I am bit confuse about using viewModel in Magento. I am not getting exact difference between viewModel and Block.
In which case using viewModel is best case?
Any help will be appreciated.
magento2.2 blocks viewmodel
add a comment |
I am bit confuse about using viewModel in Magento. I am not getting exact difference between viewModel and Block.
In which case using viewModel is best case?
Any help will be appreciated.
magento2.2 blocks viewmodel
add a comment |
I am bit confuse about using viewModel in Magento. I am not getting exact difference between viewModel and Block.
In which case using viewModel is best case?
Any help will be appreciated.
magento2.2 blocks viewmodel
I am bit confuse about using viewModel in Magento. I am not getting exact difference between viewModel and Block.
In which case using viewModel is best case?
Any help will be appreciated.
magento2.2 blocks viewmodel
magento2.2 blocks viewmodel
asked Feb 4 at 6:36
Dhaval SolankiDhaval Solanki
1,3711932
1,3711932
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Magento veteran Jessie has a well famous blog on viewModel which you can find it here. It answers your question at the end. It says:
When to use ViewModels?
When would you want to use ViewModels? Well, when Magento 2.2 comes out and your code doesn't need to be
backwards compatible with Magento 2.1 any more, my answer will be:
Always! However, reality is that we most likely need to maintain
backwards compatibility for some time. And the procedure above is a
bit lengthy to follow if Block classes are still simple enough without
any custom constructor.
I would say that you create some kind of ViewModel functionality as
soon as you start overriding the Block constructor to inject your own
dependency into it. A Block class that extends from a parent and
simply reuses the parents dependencies is not that bad, as long as you
don't have a huge dislike of $context. However, as soon as the Block
becomes more complex, it's always better offload features to other
classes. And ViewModels are meant to be the good addition to that.
What is the difference b/w a block and viewModel?
Magento2, in its presentation level, uses Model-View-ViewModel(MVVM) design pattern. Here don't confuse the viewModel in the MVVM with the viewModel which is in your question.
image credits: wiki - mvvm
Here View layer is delivered by the phtml files and ViewModel layer is the block classes. It is the block classes responsibility to prepare the data that needs to present to the phtml file (View layer) from the models.
Now every block in Magento extends the class MageCoreBlockTemplate
in order to get the presentational power.
So this means, if you want to add some customization or change in the presentation of a block, then that change has to
be done on the block class either through preference on plugins or by adding a new layer of block and phtml file.
In some occassions, you need to do a minor change in the presentation level, but in order to do it you may need to add a
new block or add a preference to the block in context. This seems costly as in either case, we need to deal with the
dependcy injection of the parent class MageCoreBlockTemplate
, which looks unfair in order to accomplish the change
you look forward to do in the presentational level.
Here is where the ViewModel in your question emerges with its true power. The concept is simple, we can inject any number
of viewModel layers into a block as an argument and thus can use them in the presentation level. The glory resides in the
fact that we can completely rid off the whole hell of dependency of the core class MageCoreBlockTemplate
inside a viewModel.
__construct
of the ViewModel only holds those dependencies which require to prepare the data for the presentational phtml file.
This makes it cleaner and more reliable solution to do customization in the presentational level. Since the __constuct
of a
ViewModel does not want to deal with unwanted parental dependencies, this will eventually lead to the performance boost.
Thus, I would say, the viewModels is a well engineered, well-structured add-on to the blocks, which should be our best call when
we do customization in the presentational level.
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
add a comment |
The most important part of using ViewModel is it simplifies the load time as we only implements MagentoFrameworkViewElementBlockArgumentInterface. If we use a custom block instead of ViewModel, we should extend the core block MagentoFrameworkViewElementTemplate which includes so many handy things like some extra blocks, loggers etc. And we can easily access the ViewModel by $block->getViewModel()
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "479"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f260331%2fwhen-it-is-good-to-use-viewmodel-what-is-difference-between-viewmodel-and-bloc%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Magento veteran Jessie has a well famous blog on viewModel which you can find it here. It answers your question at the end. It says:
When to use ViewModels?
When would you want to use ViewModels? Well, when Magento 2.2 comes out and your code doesn't need to be
backwards compatible with Magento 2.1 any more, my answer will be:
Always! However, reality is that we most likely need to maintain
backwards compatibility for some time. And the procedure above is a
bit lengthy to follow if Block classes are still simple enough without
any custom constructor.
I would say that you create some kind of ViewModel functionality as
soon as you start overriding the Block constructor to inject your own
dependency into it. A Block class that extends from a parent and
simply reuses the parents dependencies is not that bad, as long as you
don't have a huge dislike of $context. However, as soon as the Block
becomes more complex, it's always better offload features to other
classes. And ViewModels are meant to be the good addition to that.
What is the difference b/w a block and viewModel?
Magento2, in its presentation level, uses Model-View-ViewModel(MVVM) design pattern. Here don't confuse the viewModel in the MVVM with the viewModel which is in your question.
image credits: wiki - mvvm
Here View layer is delivered by the phtml files and ViewModel layer is the block classes. It is the block classes responsibility to prepare the data that needs to present to the phtml file (View layer) from the models.
Now every block in Magento extends the class MageCoreBlockTemplate
in order to get the presentational power.
So this means, if you want to add some customization or change in the presentation of a block, then that change has to
be done on the block class either through preference on plugins or by adding a new layer of block and phtml file.
In some occassions, you need to do a minor change in the presentation level, but in order to do it you may need to add a
new block or add a preference to the block in context. This seems costly as in either case, we need to deal with the
dependcy injection of the parent class MageCoreBlockTemplate
, which looks unfair in order to accomplish the change
you look forward to do in the presentational level.
Here is where the ViewModel in your question emerges with its true power. The concept is simple, we can inject any number
of viewModel layers into a block as an argument and thus can use them in the presentation level. The glory resides in the
fact that we can completely rid off the whole hell of dependency of the core class MageCoreBlockTemplate
inside a viewModel.
__construct
of the ViewModel only holds those dependencies which require to prepare the data for the presentational phtml file.
This makes it cleaner and more reliable solution to do customization in the presentational level. Since the __constuct
of a
ViewModel does not want to deal with unwanted parental dependencies, this will eventually lead to the performance boost.
Thus, I would say, the viewModels is a well engineered, well-structured add-on to the blocks, which should be our best call when
we do customization in the presentational level.
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
add a comment |
Magento veteran Jessie has a well famous blog on viewModel which you can find it here. It answers your question at the end. It says:
When to use ViewModels?
When would you want to use ViewModels? Well, when Magento 2.2 comes out and your code doesn't need to be
backwards compatible with Magento 2.1 any more, my answer will be:
Always! However, reality is that we most likely need to maintain
backwards compatibility for some time. And the procedure above is a
bit lengthy to follow if Block classes are still simple enough without
any custom constructor.
I would say that you create some kind of ViewModel functionality as
soon as you start overriding the Block constructor to inject your own
dependency into it. A Block class that extends from a parent and
simply reuses the parents dependencies is not that bad, as long as you
don't have a huge dislike of $context. However, as soon as the Block
becomes more complex, it's always better offload features to other
classes. And ViewModels are meant to be the good addition to that.
What is the difference b/w a block and viewModel?
Magento2, in its presentation level, uses Model-View-ViewModel(MVVM) design pattern. Here don't confuse the viewModel in the MVVM with the viewModel which is in your question.
image credits: wiki - mvvm
Here View layer is delivered by the phtml files and ViewModel layer is the block classes. It is the block classes responsibility to prepare the data that needs to present to the phtml file (View layer) from the models.
Now every block in Magento extends the class MageCoreBlockTemplate
in order to get the presentational power.
So this means, if you want to add some customization or change in the presentation of a block, then that change has to
be done on the block class either through preference on plugins or by adding a new layer of block and phtml file.
In some occassions, you need to do a minor change in the presentation level, but in order to do it you may need to add a
new block or add a preference to the block in context. This seems costly as in either case, we need to deal with the
dependcy injection of the parent class MageCoreBlockTemplate
, which looks unfair in order to accomplish the change
you look forward to do in the presentational level.
Here is where the ViewModel in your question emerges with its true power. The concept is simple, we can inject any number
of viewModel layers into a block as an argument and thus can use them in the presentation level. The glory resides in the
fact that we can completely rid off the whole hell of dependency of the core class MageCoreBlockTemplate
inside a viewModel.
__construct
of the ViewModel only holds those dependencies which require to prepare the data for the presentational phtml file.
This makes it cleaner and more reliable solution to do customization in the presentational level. Since the __constuct
of a
ViewModel does not want to deal with unwanted parental dependencies, this will eventually lead to the performance boost.
Thus, I would say, the viewModels is a well engineered, well-structured add-on to the blocks, which should be our best call when
we do customization in the presentational level.
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
add a comment |
Magento veteran Jessie has a well famous blog on viewModel which you can find it here. It answers your question at the end. It says:
When to use ViewModels?
When would you want to use ViewModels? Well, when Magento 2.2 comes out and your code doesn't need to be
backwards compatible with Magento 2.1 any more, my answer will be:
Always! However, reality is that we most likely need to maintain
backwards compatibility for some time. And the procedure above is a
bit lengthy to follow if Block classes are still simple enough without
any custom constructor.
I would say that you create some kind of ViewModel functionality as
soon as you start overriding the Block constructor to inject your own
dependency into it. A Block class that extends from a parent and
simply reuses the parents dependencies is not that bad, as long as you
don't have a huge dislike of $context. However, as soon as the Block
becomes more complex, it's always better offload features to other
classes. And ViewModels are meant to be the good addition to that.
What is the difference b/w a block and viewModel?
Magento2, in its presentation level, uses Model-View-ViewModel(MVVM) design pattern. Here don't confuse the viewModel in the MVVM with the viewModel which is in your question.
image credits: wiki - mvvm
Here View layer is delivered by the phtml files and ViewModel layer is the block classes. It is the block classes responsibility to prepare the data that needs to present to the phtml file (View layer) from the models.
Now every block in Magento extends the class MageCoreBlockTemplate
in order to get the presentational power.
So this means, if you want to add some customization or change in the presentation of a block, then that change has to
be done on the block class either through preference on plugins or by adding a new layer of block and phtml file.
In some occassions, you need to do a minor change in the presentation level, but in order to do it you may need to add a
new block or add a preference to the block in context. This seems costly as in either case, we need to deal with the
dependcy injection of the parent class MageCoreBlockTemplate
, which looks unfair in order to accomplish the change
you look forward to do in the presentational level.
Here is where the ViewModel in your question emerges with its true power. The concept is simple, we can inject any number
of viewModel layers into a block as an argument and thus can use them in the presentation level. The glory resides in the
fact that we can completely rid off the whole hell of dependency of the core class MageCoreBlockTemplate
inside a viewModel.
__construct
of the ViewModel only holds those dependencies which require to prepare the data for the presentational phtml file.
This makes it cleaner and more reliable solution to do customization in the presentational level. Since the __constuct
of a
ViewModel does not want to deal with unwanted parental dependencies, this will eventually lead to the performance boost.
Thus, I would say, the viewModels is a well engineered, well-structured add-on to the blocks, which should be our best call when
we do customization in the presentational level.
Magento veteran Jessie has a well famous blog on viewModel which you can find it here. It answers your question at the end. It says:
When to use ViewModels?
When would you want to use ViewModels? Well, when Magento 2.2 comes out and your code doesn't need to be
backwards compatible with Magento 2.1 any more, my answer will be:
Always! However, reality is that we most likely need to maintain
backwards compatibility for some time. And the procedure above is a
bit lengthy to follow if Block classes are still simple enough without
any custom constructor.
I would say that you create some kind of ViewModel functionality as
soon as you start overriding the Block constructor to inject your own
dependency into it. A Block class that extends from a parent and
simply reuses the parents dependencies is not that bad, as long as you
don't have a huge dislike of $context. However, as soon as the Block
becomes more complex, it's always better offload features to other
classes. And ViewModels are meant to be the good addition to that.
What is the difference b/w a block and viewModel?
Magento2, in its presentation level, uses Model-View-ViewModel(MVVM) design pattern. Here don't confuse the viewModel in the MVVM with the viewModel which is in your question.
image credits: wiki - mvvm
Here View layer is delivered by the phtml files and ViewModel layer is the block classes. It is the block classes responsibility to prepare the data that needs to present to the phtml file (View layer) from the models.
Now every block in Magento extends the class MageCoreBlockTemplate
in order to get the presentational power.
So this means, if you want to add some customization or change in the presentation of a block, then that change has to
be done on the block class either through preference on plugins or by adding a new layer of block and phtml file.
In some occassions, you need to do a minor change in the presentation level, but in order to do it you may need to add a
new block or add a preference to the block in context. This seems costly as in either case, we need to deal with the
dependcy injection of the parent class MageCoreBlockTemplate
, which looks unfair in order to accomplish the change
you look forward to do in the presentational level.
Here is where the ViewModel in your question emerges with its true power. The concept is simple, we can inject any number
of viewModel layers into a block as an argument and thus can use them in the presentation level. The glory resides in the
fact that we can completely rid off the whole hell of dependency of the core class MageCoreBlockTemplate
inside a viewModel.
__construct
of the ViewModel only holds those dependencies which require to prepare the data for the presentational phtml file.
This makes it cleaner and more reliable solution to do customization in the presentational level. Since the __constuct
of a
ViewModel does not want to deal with unwanted parental dependencies, this will eventually lead to the performance boost.
Thus, I would say, the viewModels is a well engineered, well-structured add-on to the blocks, which should be our best call when
we do customization in the presentational level.
edited Feb 5 at 6:42
answered Feb 4 at 6:41
Rajeev K TomyRajeev K Tomy
14.5k54587
14.5k54587
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
add a comment |
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
Yes Thanks for reply I read this blog but after reading this it is not clear what is difference between viewmodel and block ?
– Dhaval Solanki
Feb 5 at 4:29
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
@DhavalSolanki I made an edit to answer your question. I hope that helps
– Rajeev K Tomy
Feb 5 at 6:42
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
Thanks for detailed explanation
– Dhaval Solanki
Feb 7 at 5:59
add a comment |
The most important part of using ViewModel is it simplifies the load time as we only implements MagentoFrameworkViewElementBlockArgumentInterface. If we use a custom block instead of ViewModel, we should extend the core block MagentoFrameworkViewElementTemplate which includes so many handy things like some extra blocks, loggers etc. And we can easily access the ViewModel by $block->getViewModel()
add a comment |
The most important part of using ViewModel is it simplifies the load time as we only implements MagentoFrameworkViewElementBlockArgumentInterface. If we use a custom block instead of ViewModel, we should extend the core block MagentoFrameworkViewElementTemplate which includes so many handy things like some extra blocks, loggers etc. And we can easily access the ViewModel by $block->getViewModel()
add a comment |
The most important part of using ViewModel is it simplifies the load time as we only implements MagentoFrameworkViewElementBlockArgumentInterface. If we use a custom block instead of ViewModel, we should extend the core block MagentoFrameworkViewElementTemplate which includes so many handy things like some extra blocks, loggers etc. And we can easily access the ViewModel by $block->getViewModel()
The most important part of using ViewModel is it simplifies the load time as we only implements MagentoFrameworkViewElementBlockArgumentInterface. If we use a custom block instead of ViewModel, we should extend the core block MagentoFrameworkViewElementTemplate which includes so many handy things like some extra blocks, loggers etc. And we can easily access the ViewModel by $block->getViewModel()
answered Feb 5 at 6:17
Kishan PatadiaKishan Patadia
3,6331923
3,6331923
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f260331%2fwhen-it-is-good-to-use-viewmodel-what-is-difference-between-viewmodel-and-bloc%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown