Asp.NET MVC and DOS – re-using the ViewModels
(Please read first : http://msprogrammer.serviciipeweb.ro/2010/03/29/asp-net-mvc-orm-and-viewmodels/ )
One of the biggest challenges in programming was write once- GUI everywhere ( Ok, ORM impedance mismatch is another story)
I mean by that re-using the logic from an application in another application. ASP.NET MVC , with the commitment to strongly viewmodels, make me think that it will be now easier to transfer the viewmodels to an console application.
Let’s see the usual Employee-Department and creation.
First the Database :
Then the ViewModel for creating an employeeand for list of employees
public class ViewModelEmployee { public static DepartmentList ListOfDepartments { get { //TODO : put this into cache to not load every time DepartmentList dl = new DepartmentList(); dl.Load(); return dl; } } } public class ViewModelEmployeeCreate : ViewModelEmployee { public Employee emp = new Employee(); public static void SaveNew(Employee emp) { emp.SaveNew(); } } public class ViewModelEmployeeList : ViewModelEmployee { public EmployeeList employees; public void Load() { employees = new EmployeeList(); employees.Load(); } }
And now the magic :
ASP.NET MVC | DOS |
[HttpPost] public ActionResult Create(Employee emp,long DepartmentID) { try { emp.Department = new Department() { ID = DepartmentID }; ViewModelEmployeeCreate.SaveNew(emp); return RedirectToAction("Index"); } catch(Exception ex) { ModelState.AddModelError("", ex.Message); return View(new ViewModelEmployeeCreate(){emp=emp}); } } |
Console.WriteLine("choose department"); var listdep=ViewModelEmployee.ListOfDepartments; foreach (var item in listdep) { Console.WriteLine(item.ID + ")" + item.Name); } string s=Console.ReadLine(); long DepartmentID; if (!long.TryParse(s, out DepartmentID)) { Console.WriteLine("exit : not a long :" + s); return; } if (!listdep.Exists(item => item.ID == DepartmentID)) { Console.WriteLine("not a valid id:" + s); return; } Employee emp = new Employee(); emp.Department = new Department() { ID = DepartmentID }; Console.Write("employee name ?"); emp.Name= Console.ReadLine(); ViewModelEmployeeCreate.SaveNew(emp); |
Now for listing employees:
ASP.NET MVC | DOS |
public ActionResult Index() { ViewModelEmployeeList vmel = new ViewModelEmployeeList(); vmel.Load(); return View(vmel); } |
ViewModelEmployeeList vmel = new ViewModelEmployeeList(); vmel.Load(); foreach (var item in vmel.employees) { Console.WriteLine(item.Name); } |
As you can see , the codes are really similar ( although the console application is filled with first verification and the MVC is not )
Please download the application from testaddropdownlist
To install : run the emp.sql file, change in the app.config/web.config the connection string to point to the real database/sql server.
Summary : This simple application shows how to re-use ViewModels from an ASP.NET MVC and a DOS Console Application
Homework : Add WindowsForms application and do the same.