Skip to main content
1 of 2
Den
  • 4.9k
  • 2
  • 34
  • 50

What is the best practice when it comes to writing classes that might have to know about the user interface.

Wouldn't a class knowing how to draw itself break some best practices since it depends on what the user interface is (console, GUI, etc)?

In this case you can still use MVC/MVVM and inject different UI implementations using common interface:

public interface IAgnosticChartDrawing { public void Draw(ChartProperties chartProperties); event EventHandler ChartPanned; } public class GuiChartDrawer : UserControl, IAgnosticChartDrawing { public void Draw(ChartProperties chartProperties) { //GDI, GTK or something else... } //Implement event based on mouse actions } public class ConsoleChartDrawer : IAgnosticChartDrawing { public void Draw(ChartProperties chartProperties) { //'Draw' using characters and symbols... } //Implement event based on keyboard actions } IAgnosticChartDrawing guiView = new GuiChartDrawer(); IAgnosticChartDrawing conView = new ConsoleChartDrawer(); Model model = new FinancialModel(); SampleController controllerGUI = new SampleController(model, guiView); SampleController controllerConsole = new SampleController(model, conView); 

This way you will be able to re-use your Controller and Model logic while being able to add new types of GUI.

Den
  • 4.9k
  • 2
  • 34
  • 50