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.