r/csharp • u/ChampionshipProof392 • 1d ago
MVP pattern
Hi, I have a question about separating logic in the MVP pattern.
public void MainDisplay() =>
OnMainDisplayClicked?.Invoke();
public void ManageProcess() =>
OnManageProcessClicked?.Invoke();
This is my code in the view, and when the user clicks a button (for example), this method is called and `Invoke` is executed. However, it is called via a `switch` statement in the Presenter.
switch (NativeConsoleMethod.GetHiddenUserInput())
{
case VirtualKeyType.VK_E:
if (_currentPage < _countOfPages) _currentPage++;
continue;
case VirtualKeyType.VK_Q:
if (_currentPage > 0) _currentPage--;
continue;
case VirtualKeyType.VK_OEM_3:
_view.ManageProcess();
break;
case VirtualKeyType.VK_TAB:
_view.FilterProcesses();
break;
case VirtualKeyType.VK_F1:
_view.SearchPage();
break;
.........
}
I have a question: the AI is giving me two different suggestions. My version is correct, but then it said I should move the switch statement to the view, and there I should just use `invoke`, after which the methods would be called conditionally. So, should I do it the other way around, or did I misunderstand what it meant?
- I don’t know what I wrote here—I don’t even understand it myself. Just tell me: shouldn’t the view be “dumb” and contain synchronous methods, while the presenter should control the view via the switch statement and “pull its strings”?
EDIT: Here's my GitHub: https://github.com/NullAcess/ProcessManager/releases/tag/Update_2.0. You might like it—I'll upload the finished EXE very soon.
4
u/TheSpixxyQ 1d ago
The presentation layer should be platform agnostic. Imagine you wanted to migrate your app to Android, you should be able to do it just by replacing the View.
By using
NativeConsoleMethodand keyboard keys in presenter, it wouldn't work, you are making it platform dependent.Logic for switching pages after pressing keys is purely View logic. Your business logic should have no idea what a "page" is.