Factory Design Pattern Introduction

preview_player
Показать описание
Text version of the video

Healthy diet is very important both for the body and mind. If you like Aarvi Kitchen recipes, please support by sharing, subscribing and liking our YouTube channel. Hope you can help.

Slides

Design Patterns Tutorial playlist

Design Patterns Text articles and slides

All Dot Net and SQL Server Tutorials in English

All Dot Net and SQL Server Tutorials in Arabic

In this session we will learn
1. What is Factory Design Pattern
2. Implementation Guidelines
3. Simple factory implementation

What is Factory Design Pattern : Gang of Four Definition
Define an interface for creating an object, but let subclasses decide which class to instantiate. The Factory method lets a class defer instantiation it uses to subclasses

Factory pattern is one of the most used design patterns in real world applications. Factory pattern creates object without exposing the creation logic to the client and refer to newly created object using a common interface

Implementation Guidelines

We need to choose Factory Pattern when
1. The Object needs to be extended to subclasses
2. The Classes doesn’t know what exact sub-classes it has to create
3. The Product implementation tend to change over time and the Client remains unchanged

Simple Factory Example : Business Requirement

Differentiate employees as permanent and contract and segregate their pay scales as well as bonus based on their employee types

We can address the above requirement with the below implementations
1. Implement without Factory Pattern
2. Use a Simple Factory
3. Enhance Simple factory to Factory Method Pattern

We will be working on the Employee Portal that we used in the Singleton tutorials. Please refer to them before proceeding

Prerequisite steps
1. Enhance the DB model to add Employee_Type Table
2. Add Permanent and Contract Employees as Master Data.
3. Add new columns EmployeeTypeID, Bonus, HourlyPay to Emplyee Table and add Foreign key constraint to the Emp
4. Update the Emloyee Model edmx file with the latest changes.
5. Create new BaseController and Move the Singleton Exception logic to the base controller
public class BaseController : Controller
{
private ILog _ILog;
public BaseController()
{
_ILog = Log.GetInstance;
}
protected override void OnException(ExceptionContext filterContext)
{
_ILog.LogException(filterContext.Exception.ToString());
filterContext.ExceptionHandled = true;
this.View("Error").ExecuteResult(this.ControllerContext);
}
}
6. Regenerate the EmployeesController and its corresponding views
7. Comment the code in Create and Update views which accepts inputs for Bonus and HourlyPay

Solution 1: Implement without Factory Pattern

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name,JobDescription,Number,Department,HourlyPay,Bonus,EmployeeTypeID")] Employee employee)
{
if (ModelState.IsValid)
{
if (employee.EmployeeTypeID == 1)
{
employee.HourlyPay = 8;
employee.Bonus = 10;
}
else if (employee.EmployeeTypeID == 2)
{
employee.HourlyPay = 12;
employee.Bonus = 5;
}
db.Employees.Add(employee);
db.SaveChanges();
return RedirectToAction("Index");
}

ViewBag.EmployeeTypeID = new SelectList(db.Employee_Type, "Id", "EmployeeType", employee.EmployeeTypeID);
return View(employee);
}

The above code introduces
1. Tight coupling between Controller class and Business logic
2. For any new employee type addition, we end up modifying the controller code adding extra over heads in the development and testing process

Using a simple factory eliminates the above drawbacks.

Solution 2: Implement with Simple Factory

1. Add new Manager folder and add the below interface and classes

public interface IEmployeeManager
{
decimal GetBonus();
decimal GetPay();
}
Рекомендации по теме
Комментарии
Автор

Great video, Avish! One of the best simple explanation for the Factory Pattern. One who wants to revise MVC and Factory Pattern this is the best video he/she can get. Good luck for your upcoming videos.

JeevarajanKumar
Автор

Your tutorials are excellent.Your way of explaining is better than what you can learn from Top Universities paying exorbitant fees.Keep it up.

bgmodur
Автор

woah!

I introduced 1 Interface, 2 classes and multiple if statements to remove a couple of lines of coupling.
I am a senior developer now. Hell yeah!!

pioneer
Автор

Time flies by when I`m listening to this, superb!

GamzeninDunyas-thhh
Автор

Thank you Avish for your wonderful lessons!

kamdemkakengne
Автор

Thank you for making such an useful and helpful video. This source of knowledge you've provided, helped me tremendously to understand Factory design pattern much better.

kopilkaiser
Автор

Great Work, please try to make it short using a plain console application. The actual content starts after half the video duration

MsAneesh
Автор

Thank you so much Avish for the wonderful demonstration

naodagere
Автор

Now I can draw the picture of Factory Pattern. Great Explanation. Thanks a lot .

suvamchanda
Автор

8:50 When I try to replace EmployeeController with the new one "BaseController" it complains "There was an error running the selected code generator: 'Object reference not set to an instance of an object.'"

LarryPeteet
Автор

Very neatly explained. I think this video deserves more likes.

vijayv
Автор

Couldn't you come up with a simpler example so that we focus on the design pattern???

thesuperiorman
Автор

Sir, can you provide video tutorials on agile and scrum methodologies along with TFS ..

shikhasaxena
Автор

Great Explanation. I really liked this series.

TheJokesapart
Автор

Hi sir, can you or venkat please make a tutorial on repository pattern with unit of work?

silluarts
Автор

Very nice article to understand the factory design pattern.

shyamsrivastava
Автор

Still implementation voilets the SOLID principals of design patterns that is Single Responsibility principal & Dependency inversion principle.

vithalwadjec
Автор

hello, can you add more real world examples of singleton?
Also, can you also add Repository & Unit of Work?

hemankothari
Автор

Can the factory class (EmployeeManagerFactory) and it's method (GetEmployeeManager) be static? Seems like that would be better but maybe there is a down side I'm not seeing.

danfeeney
Автор

Hi, thank you so much for this nice explanation, however after updating the db and model when I am trying to create a controller by right clicking on controller, I'm getting one error called " there was an error running the selected code generator: 'object reference not set to an instance of an object'"..Please help me on this..Thanks in advance #Avish

Anasua