Archive for July, 2011

Understanding MVC design pattern in java

Posted on July 1st, 2011 by admin  |  No Comments »

MVC/ MVP  and other popular design pattern led to development of related frameworks like Struts, Ruby on rails and Cakephp etc. These are simple design pattern used by developers to exploit some programming advantages like OOPS, separation of UI and business logic etc. When we use lots of library and parent classes to automate things and do magic work the pattern eventually becomes more useful and later we call it framework instead of just a design pattern. But the core concept is very much same and peoples gets confused what is MVC essentially.

MVC pattern can be adopted by wide variety of applications like desktop, web apps and even command line program can be fitted into this design. To understand core functioning of MVC I will take you through simple command line example because other forms of application will vary slightly and create confusion due to their different nature and implementation in view/event handling.

  • Create a project in eclipse with the following package structure

  • Project has only one set of controller, model and view named after Employee, the top class EntryPoint has main method where application begins its execution.
  • EntryPoint class

package com.mvc;

import com.mvc.controller.EmployeeController;
import com.mvc.model.Employee;
import com.mvc.views.EmployeeView;

public class EntryPoint {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

// Create controller object
EmployeeController ec = new EmployeeController();

// Create model object
Employee emp = new Employee(ec);
emp.setName("Tom Snyder");
emp.setSalary(5600);

// Create view object
EmployeeView empView = new EmployeeView(ec);

// render default action
ec.index();
}

}
  • EmployeeController class

package com.mvc.controller;

import com.mvc.model.Employee;
import com.mvc.views.EmployeeView;

public class EmployeeController {
private Employee employee;
private EmployeeView employeeView;

public void init(Employee e, EmployeeView ev){
employee = e;
employeeView = ev;
}

public void index() {
// TODO Auto-generated method stub
employeeView.render(this.employee);
}
public Employee editEmployee(String name, int salary){
this.employee.setName(name);
this.employee.setSalary(salary);
return employee;
}
public void setNodel(Employee emp){
employee = emp;
}
public void setView(EmployeeView empV){
employeeView = empV;
}

}
  • Employee class

package com.mvc.model;

import com.mvc.controller.EmployeeController;

public class Employee {
private String name;
private EmployeeController ecr;
private int salary = 0; // 0 - 100

public Employee(EmployeeController ecr){
this.ecr = ecr;
this.ecr.setNodel(this);
}
public String getName(){
return name;
}
public void setName (String Name){
name = Name;
}
public int getSalary(){
return salary;
}
public void setSalary(int Salary){
salary = Salary;
}
}
  • EmployeeView class

package com.mvc.views;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.mvc.controller.EmployeeController;
import com.mvc.model.Employee;

public class EmployeeView {
private EmployeeController ecr;
public EmployeeView(EmployeeController ecr) {
// TODO Auto-generated constructor stub
this.ecr = ecr;
this.ecr.setView(this);
}

public void render(Employee emp){
System.out.println("Employee Name "+ emp.getName());
System.out.println("Employee Salary "+ emp.getSalary());
System.out.println("======================");

System.out.println("Enter new name ....");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
try {
String name = br.readLine();
System.out.println("Enter new salary ....");
String number = br.readLine();
int marks = Integer.parseInt(number);
Employee newemp = ecr.editEmployee(name, marks);
render(newemp);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(NumberFormatException e){
e.printStackTrace();
}
}
}