Click here to Skip to main content
13,152,454 members (39,874 online)
Rate this:
Please Sign up or sign in to vote.
I've used EF-DB first approach and have written a simple app to retrieve the data from the database and show it in the view. The code is simple and ok for a beginner like me, but how can I implement an effective design-pattern like interface-specification pattern or generic repository pattern, and possibly dependency injection to improve the code below ?

Please note that I've started looking into topics like interfaces, design patterns, etc only recently, So I'd greatly appreciate it if you could please break down the explanation to a beginner level.

Below are my view-model and the controller. My model contains a stored-procedure and a table in the .edmx file - Thanks

public class OfficeDTO
    public IEnumerable<employeedto> Employees { get; set; }
    public IEnumerable<departmentdto> Departments { get; set; }

public class EmployeeDTO
   public int EmpId { get; set; }
   public string EmpName { get; set; }

public class DepartmentDTO
    public string DeptCode { get; set; }
    public string DeptName { get; set; }

      public ActionResult Index()
                    EF.OfficeEntities ctx = new EF.OfficeEntities();
                    Models.OfficeDTO office = new Models.OfficeDTO();
                    using (ctx)
                        var empList = ctx.GetEmployeesByYearJoined("2009")
                        var empResults = (from q in empList
                                       select new Models.EmployeeDTO
                                           EmpId = q.EmpID,
                                           EmpName = q.FirstName + q.LastName
                        office.Employees = empResults;
                        var depResults = (from q in ctx.Departments
                                          select new Models.DepartmentDTO
                                              DeptCode = q.DepartmentCode,
                                              DeptName = q.DepartmentName
                        office.Departments = depResults;
                    return View(office);
Posted 15-Feb-13 9:39am
Updated 15-Feb-13 9:45am
TRK3 15-Feb-13 16:23pm

Look up "YAGNI" -- it is a far, far more valuable skill for a professional programmer to learn "YAGNI" than it is to learn "design patterns".

There is absolutely no reason to make use of a "design pattern" unless that pattern actually solves an existing problem that you have.

Don't even try to do it as "a learning exercise".

The only thing you should do when initially studying "design patterns" is take note of what problem that particular design pattern solves -- and take great pains to understand what the problem is that it claims to solve.

Then, if you actually encounter that problem at some point in the future, remember that there is a design pattern for that and go look it up and see how it applies to your actual problem. Decide if it actually does solve your problem. And only then apply it.

Don't try to use as many design-patterns as possible. Don't try to make your code fit a design-pattern if that pattern doesn't solve a problem you actually need to solve.

There is absolutely nothing wrong with the code you wrote.

It's clear what it does. It's easy to follow, and it should be simple to debug.

If you start throwing in dependency-injection and generic-repository and, and ... it becomes so abstract that you won't be able to tell what the code does just by looking at it, and debugging it will be an exercise in stepping through all kinds of nested calls and indirections -- way more work than it is worth.
devdev13 15-Feb-13 18:35pm
Thanks a lot for your comment. I will certainly consider your advice, but if you have to improve the code I've written above, what are the steps you would take ? I was going through the code-first approach, and almost every piece of code i see, looks pretty different from what i've written. And most of the people I speak to suggest me to use generic repository pattern because it supports unit-testing, and increases performance when accessing data from multiple sources. what are your thoughts ? Is there anychance you could please refactor my code, and make it look more like the ones on ASP.NET website ? Thanks

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web02 | 2.8.170924.2 | Last Updated 15 Feb 2013
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100