(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.
Leave a Reply