What is the MVC version of this code?

Posted by Ian Boyd on Stack Overflow See other posts from Stack Overflow or by Ian Boyd
Published on 2009-06-07T15:48:31Z Indexed on 2010/05/17 11:00 UTC
Read the original article Hit count: 193

i'm trying to wrap my head around how to enterprise up my code: taking a simple routine and splitting it up into 5 or 6 methods in 3 or 4 classes.

i quickly came up three simple examples of code how i currently write it. Could someone please convert these into an MVC/MVP obfuscated version?


Example 1: The last name is mandatory. Color the text box red if nothing is entered. Color it green if stuff is entered:

private void txtLastname_TextChanged(object sender, EventArgs e)
{
   //Lastname mandatory. 
   //Color pinkish if nothing entered. Greenish if entered.
   if (txtLastname.Text.Trim() == "")
   {
      //Lastname is required, color pinkish
      txtLastname.BackColor = ControlBad;
   }
   else
   {
      //Lastname entered, remove the coloring
      txtLastname.BackColor = ControlGood;
   }
}

Example 2: The first name is optional, but try to get it. We'll add a bluish tint to this "try to get" field:

private void txtFirstname_TextChanged(object sender, EventArgs e)
{
    //Firstname can be blank.
    //Hint them that they should *try* to get it with a bluish color.
    //If they do enter stuff: it better be not all spaces.
    if (txtFirstname.Text == "")
    {
       //Nothing there, hint it blue
       txtFirstname.BackColor = ControlRequired;
    }
    else if (txtFirstname.Text.Trim() == "")
    {
       //They entered spaces - bad user!
       txtFirstname.BackColor = ControlBad;
    }
    else
    {
       //Entered stuff, remove coloring
       txtFirstname.BackColor = SystemColors.Window;
    }
}

Example 3 The age is totally optional. If an age is entered, it better be valid:

private void txtAge_TextChanged(object sender, EventArgs e)
{
   //Age is optional, but if entered it better be valid
   int nAge = 0;
   if (Int32.TryParse(txtAge.Text, out nAge))
   {
      //Valid integer entered
      if (nAge < 0)
      {
         //Negative age? i don't think so
         txtAge.BackColor = ControlBad;
      }
      else
      {
         //Valid age entered, remove coloring
         txtAge.BackColor = SystemColors.Window;
      }
   }
   else
   {
      //Whatever is in there: it's *not* a valid integer,
      if (txtAge.Text == "")
      {
         //Blank is okay
         txtAge.BackColor = SystemColors.Window;
      }
      else
      {
         //Not a valid age, bad user
         txtAge.BackColor = ControlBad;
      }
   }
}

Every time i see MVC code, it looks almost like random splitting of code into different methods, classes, and files. i've not been able to determine a reason or pattern to their madness. Without any understanding of they why it's being one some way, it makes no sense. And using the words model, view, controller and presenter, like i'm supposed to know what that means, doesn't help.

The model is your data.

The view shows data on screen.

The controller is used to carry out the users actions

And oranges taste orangy.


Here's my attempt at splitting things up in order to make the code more difficult to follow. Is this anywhere close to MVC?

private void txtFirstname_TextChanged(object sender, EventArgs e)
{
   FirstnameTextChangedHandler(sender, e);
}

private void FirstnameTextChangedHandler(sender, e)
{
   string firstname = GetFirstname();

   Color firstnameTextBoxColor = GetFirstnameTextBoxColor(firstname);

   SetFirstNameTextBoxColor(firstnameTextBoxColor);
}

private string GetFirstname()
{
   return txtFirstname.Text;
}

private Color GetFirstnameTextBoxColor(string firstname)
{
    //Firstname can be blank.
    //Hint them that they should *try* to get it with a bluish color.
    //If they do enter stuff: it better be not all spaces.
    if (firstname == "")
    {
       //Nothing there, hint it blue
       return GetControlRequiredColor();
    }
    else if (firstname.Trim() == "")
    {
       //They entered spaces - bad user!
       return GetControlBadColor();
    }
    else
    {
       //Entered stuff, remove coloring
       return GetControlDefaultColor();
    }
}

private Color GetControlRequiredColor()
{
   return ControlRequired;
}

private Color GetControlBadColor()
{
   return ControlBad;
}

private Color GetControlGoodColor()
{
   return ControlGood;
}
//am i doin it rite

i've obfuscated the code, but it's still altogether. The next step in the MVC obfuscation, i gather, is to hide the code in 3 or 4 different files.

It's that next step that i don't understand. What is the logical separation of which functions are moved into what other classes? Can someone translate my 3 simple examples above into full fledged MVC obfuscation?


Edit: Not ASP/ASP.NET/Online. Pretend it's on a desktop, handheld, surface, kiosk. And pretend it's language agnostic.

© Stack Overflow or respective owner

Related posts about mvc

Related posts about language-agnostic