Subtitles section Play video Print subtitles Welcome everyone to the session of Learn Design Pattern and architecture pattern step by step with the project And this complete series we are going to complete in flat 8 hours In 8 hours we will be completing most of the important patterns and architecture pattern in this project which we are going to just start The first question which will probably come to your mind is that Is it really possible to cover all the Design Pattern in 8 hours and that also in a single project that also with Architecture Pattern My answer is no In this project we will be covering almost 60% of the Gang of Four Design Pattern plus some other patterns which are other than gang of four As well as we will be covering at least 40-50% of the architecture patterns It is not possible to cover all the patterns in a project Because Design Patterns cannot be forcibly use in your project But I can tell you that in whatever project your are working at this moment at least 20-30% design patterns are already available Via this project my goal is to give you actual idea of how design pattern and architecture patterns are used in a project In case you are concerned saying that no I want to learn all the design patterns and that also I want to step by step You can follow our video series which have on Questpondvd.com Where we have explained 40-50 Design Patterns Which you can see here Factory pattern, Abstract Factory, Builder, Prototype Adapter, Decorator named that pattern It has been completed in this series There are two ways of learning Design Patterns One is if you are a person who wants to go concept by concept code by code here it is You can see that login to your questpondvd account see this sections step by step And the other way is by doing a project Take up a project start coding the design pattern and let fall naturally along the way If you are asking me the suggestions If you are asking me tell us what is good Is going code by code and pattern by pattern by pattern is good or the project based approach is good My personal choice is the project based approach Start with the project based approach but as i have told I can complete 60-70% Design Patter The remaining 30% are still left out Those 30% Design Pattern you can watch from here and second what I'll be doing when I am teaching you this project I will be telling you to go and see more about the Design Pattern in this section I'll be guiding you at right places to hop in this series and come back to this project My advice here would be to go via the project based approach and not via Design pattern after design approach I'll tell you why Design patterns are thought processes and thought processes cannot be explained via just sample code or PPTs or some UML diagrams If you see on the internet lot of people explain Design patterns by showing UML diagrams by showing examples like cars,trees and rivers which does not make any sense We need to do a real project We need to feel design pattern We need to understand it In what kind of scenario it has to be used The best way to learn design pattern is by doing a poject I would suggest you follow this video series and as time comes I will tell you to go and see the appropriate design pattern from this section here Before I move ahead Just talk about one myth which people have about design patterns Lot of people think that in order to do a good architecture or create a good architecture we need to implement all design patterns in our project Also I have seen that some of the developers try to force design patterns They say lets implement Factory pattern lets implement Singleton Pattern Bu the fact is Patterns come out naturally They are completely on demand as per the scenario It is a very horrible myth that you need to force design pattern or you need to implement design patterns for sibling your project or implement all design patterns in your project But the fact is that patterns are natural and tehy should come on demand Before we move ahead and we start defining design pattern we start looking at the project Let me spend 2 or 3 minutes here discussing about difference between design pattern architecture pattern and Architecture Style I have worked with so many developers across different geographical location with different culture But when it comes about differentiating between these three things People just use this words interchangeable This three things they must be looking very similar for you but they have a huge difference between them When you say design pattern Design pattern is actually at a code level When some says this is a factory Design Pattern He should actually show you some kind of a sood of .... He should should show you some kind of a logic When you say its a architecture pattern Its only block level diagrams For example Model View Controller is a architecture pattern Where we say there is a controller then there is a model There is a view The first hit comes to the controller and then it picks up the model and the view Over there we just draw block diagrams Its a 30000 feet level view of your project When we talk about architecture style they are just principles they are just one liner For example rest is a architecture style which follows HTTP protocol Design pattern it is at the code level at the sood of code level Somebody has to give you some kind of a sued a code then it becomes a design pattern Architecture pattern just overall blocks as I have said model view view model or UI layer and then model layer then data access layer These layers how they are implemented? What code goes into that? that is not we have shown here And architecture principles it is just principles just one liners which we need to follow How do you follow it by using C# or Java or whatever It is all upto you Design pattern at a very code level Architecture pattern Its more of 30000 feet level then architecture style which is just principle Next time when you say that this is a design pattern I expect code from you Next time when you say this is architecture pattern I expect some kind of a higher level diagram from you Here are some examples of design pattern, architecture pattern and architecture style Architecture patterns are normally a gang of four pattern like factory pattern, Singleton pattern Architecture pattern are more block level which says model view controller, model view model, model view presenter And the architecture style is just style its just one liner principles For example REST is a architecture style which give importance to HTTP We have REST We have SOA we have IOC These are principles this are architecture style Before we move ahead with the project Let us define design pattern If you see the official design pattern definition on the web if you go and search design pattern definition everywhere you will find this definition saying that design patterns are time tested solutions for software architecture problems Most of the time this is a definition what is given on the internet Design patterns are time tested solution for software architecture problems After working 15 20 years in IT industries and after doing lot of designing and architecting I came to one conclusion Design pattern is nothing but it is Object Oriented Programming principles It helps you to understand object oriented programming problems easily Let me put unofficial definition ahead Because of my experience I am putting this definition Design patterns are nothing but they are best practices or time tested practices for object oriented programming problems When you are doing design patterns you will suddenly feel that this is Polymorphism This is polymorphism + Inheritance It looks to be encapsulation As you do pattern after pattern at one moment of time you will realize that this nothing but interfaces, abstract classes, inheritance, polymorphism, encapsulation Design patterns\\ when you start doing practically it is nothing but solving object oriented programming problems in a much better manner In case your are too worried about this definition what I have given because definitely I am not the official person to define definitions here People who actually created gang of four even they have admitted in their interview And if you go see this small interview where one of the person from gang of four Mr. Gamma when he was a interviewed by Bill he said that patterns as a whole can help people learn object oriented thinking It can help you to leverage polmorphism help you to design composition, delegations help you to make a more pluggable system It is not just my feeling my understanding here It also comes from the main source they also admit that yes it is nothing but it helps you to think object oriented programming problems in a much better manner Without wasting time let us go ahead and discuss about the project This project is extremely simple project In order to make the learning easy and to not complete things first go I have divided this project into various phases So at this moment we will concentrate just on phase 1 In phase 1 we have 6-7 requirements Let us concentrate on that requirement and let us try to architect this system and let us see what design pattern comes up What is this coolShop project? This coolShop project is a small software which a company wants to make this company a large retail shopping mall and it has chain mall in Mumbai and Pune city And the company wants a very very simple customer management system for their shops It has the following requirements Which they want to fulfill First requirement number 1 Application would be capturing three fields Customer name The name of the customer phone number Bill amount How much is the bill Bill Date and the address of the customer Five fields this application should capture in Phase 1 The second requirement is in Phase 1 there are two types of customers which they have included One is a lead a lead is person who comes to the shop but he does not buy anything He just enquires And a customer is a person Who actually comes and buys things and does a financial transaction Requirement Number 2 The system at thus moment should support two types of customers One is a lead and the other is a customer Now The customer and the lead have different types of validations the different terms of validations A lead who comes to the shop he does not buy anything For him bill amount and bill date is not compulsory At least he has to give his name and phone number so that tomorrow probably my marketing people can call him up say that there is discount on something When it is a lead only customer name and phone number is compulsory But for customer all the fields are compulsory The system should have a provision to add new validations rule seamlessly This is very important In other words tomorrow if I say I want to add a new customer type called as gold customer For him these validations rules are true System should be flexible enough to add this new rule without doing lot of changes across the system That is a third requirement The fourth requirement is system should have the ability to add, update and delete customer data The fifth requirement which is again a very important requirement For now this system will use SQLServer and to connect to SQL server it will use ADO.NET as a data layer technology But tomorrow The system would probably use new data access technologies like Entity framework or LINQ This migration from one data layer to other data layer should also happens seamlessly We don't have to do lot of changes across this system that is requirement number 5 and the last requirement is system should have one ability of cancelling a modification If the end user is going and editing a record here If there are some issues with the updated value he should have the ability to cancel This project basically has six requirements First there are five fields Second one there are two types of customers at thus moment with they are having different validations and tomorrow we should be able to plugin new customers customer type into this it should have the basic crud functionality and the fifth point is basically we should be able to migrate form one data access layer technology to other data access layer technology seamlessly This is the phase 1 requirement of this project In case it is not clear from the video this requirement you can go ahead and you can download this requirement from questpondvd.com Its a very simple one pager work document Where we have put this requirement You can read through this Because the other part of the whole video will revolve around this project If this project is not understood then you won't love the further class It is important that you understand this project Read it once and twice and then continue with the video Let us move ahead first and let us first try to identify classes Let us identify entities And then as we do the project let design pattern come when it has to come First thing is to identify entities What exactly are entities? Entities are nothing but they are things what you see in the real world For example person is a entity A living object is a entity city These things are actually entities Entities in technical world or in object oriented programming world we also termed them as object In short Entities are nothing but nouns A good architect when he needs a requirement one of the things which keeps going at his back end is that Whatever are the nouns they become classes and entities You can see from our CoolShop project at this moment Mumbai, Pune, lead , customer this are some of the noun I have identified Remember that this approach has to be taken very wisely You can come with a lot of unconcerned nouns which has nothing to do with your software For example I can see that there are nouns like the CoolShop or Mumbai and Pune but they really don'y have direct impact in my project Must be they are some data which I will store in my data base like a city master or something but they really don't have impact as such on my code But you can see like now customer and lead definitely nouns which I would be dealing with in my project From here I am dropping of two three nouns like Mumbai, Pune, CoolShop but these two nouns i.e customer and lead are definitely very important for me The first thing is to identify entity try to first identify the noun and this approach please do take it very carefully So that you don't come up with unnecessary nouns which you will try to create entities off These object or this entities needs to have properties and methods To identify the properties the way to go ahead is by identifying pronouns Pronouns actually talks more about the noun For example you can see we have customer name So customer name actually talks more about the nouns we have customer address that talks more about the noun Whatever talks about the noun becomes comes properties and whatever actions these nouns are doing for example ordering a product or asking for a refund Those becomes the methods of the objects or entities I am trying to lay down a rule here Rule number 1 for architects people who are trying to become architects or people who are trying to learn design pattern Whenever you take the requirement at the back end somewhere don't has a hard and fast tool but at back end somewhere you should think about that your nouns actually becomes objects Pronounce becomes the property for that object and actions becomes or the verbs becomes a actions or the method or the functions for that object In order that these entities these objects becomes live into your computer you need to write some kind of a code for it these code or these logics you write in something called as classes Classes are nothing but templates Basically you write your code into the class and this class is lying into your hard disk and then you need to insensate this class and then your entity comes live into your RAM To insensate this class we need to use something called as a need keyword I am sure that lot of people who have already done programming they are aware of what I am saying Basically if you ask me Object oriented programming is a three step process The first thing is you need to create the class write the code for it Then you need to insensate the class then you can start performing operations on that object or on that entity Creation of objects goes through three phases When you say that you want to actually make a entity live inside your computer You need to actually at least do these steps at least. The first thing is you need to write a class you need to write the logic for that entity Second you need to go and use the new keyword and instantiate that entity inside you computer And the last one is you need to interact with those objects and achieve the neccessary functionality Any kind of object oriented programming problems or design problems which comes into the class creation processes which is more static in nature falls into structural design pattern category We have a structural design pattern category which will address problems regarding class creation inheritance Those kind of structural issues will come into structural design category Second one is object creation instantiating the object With using the new keyword any kind of problem associated with instantiation will come in two creational design category And finally when object starts running they use polymorphism and they do type casting etc On runtime if you have any kind of architectural problems It will come into the behavioral category You can see As I have said previously also design pattern is nothing but it is object oriented programming It solves problems around object oriented programming By this view here or by this image here you can easily make out that design pattern will revolve around classes objects and instantiation Now that we have analyse the requirement When we read the requirement we use the noun pronoun and the verb approach to to conclude entities And we said that we have two types of entities One is a customer and the other one is a lead Go ahead and create a class library and let us try to create the business layer the business layer means the library which our in which our business logic will reside I am going to create a class library a DLL Let me name this project as customer project Phase 1 This is a phase 1 of the project This class library which I have created at this moment I would like to go and name this library as The library where my business logic will reside Let me put a space here so rather than just putting customer project phase 1 I would like to name this namespace as my middle layer Lot of people can say this is the middle layer some people term this as the domain layer Some people will term this as a business layer whatever layer you want to term this as but this is the layer where you business logic will reside As we said we have two kinds of classes At this moment one customer class and the other one is alead class We said that there are five properties which we have identified by using the pronoun approach We said that we need the customer name we need the phone numbers we need the bill amount we need the bill date we need the address and so on You can see all of these five properties here and also For the lead also we have the same kind of properties We said that lead customer are different types of customer Actually the customer is who actually buys it While lead kind of a customer who actually just comes and enquires about it but he actually does not do a transactions I do understand lot of people would be screaming over here Saying that you have duplicated all this properties you have to move it to the common class and so on Believe me I am going to do that Best way to learn programming or the best way to learn architecting is by doing mistakes and then gradually improving top of it Let me see that how I can improve on it in the later stages In that way you can also see this architecture evolution We identified the entities by using the noun strategy we identified the properties of the entities by using the pronoun strategy We identified the actions by using the verb strategy Now it is time to identify the relationship between these entities Primarily there are two kinds of relationship between entities One is a relationship and other one is a Using relationship or has a relationship For example you can see on your video there Shiv is a son of his father It is more of a parent child relationship While shiv uses a car or shiv has a shirt It is more of a using relationship If you look at a requirement in the requirement it is clearly said that lead is a type of customer with less validations I would suggest you to go and read the requirement again It clearly says that lead is a type of customer In other words lead and the customer is having a kind of a parent child relationship So both of these can be inherited from a common class So let us create a common class here I am going to create a common class here called as CustomerBase This is a base class It's a class which will have all of these properties overhere And both these classes i.e the customer class will inherit from the customer base As well as the lead class will inherit from the customer base So both them will actually inherit from the customer base class Also we had one requirement regarding validation We said that when it is a only a lead then only customer name and phone number is compulsory but for a customer all the fields are compulsory The difference between the customer and the lead is in terms if validation In the customer base let me go here and define a method here saying validate This method will help to validate customer This method would be overridden by the customer and the lead as per there requirement I am going to make this method as virtual By defining a method as virtual your child classes for example you can see over here I have the customer class The customer class can go and override the validate method And he can put all the validations here While the lead class will only validate for customer name and phone number In the base class over here I will through a new exception saying that not implemented In other words this will be implemented by the child classes In the customer all the validations will happen In other words here The customer name is compulsory If the customer name is length=0 then I will go and throw a new excpetion saying customer name is required and in the same way I have put validations for all the other fields as well You can say phone number is compulsory bill amount is compulsory bill date cannot exceed today's date address is compulsory etc For the lead only the name and the phone number is compulsory We have the customer and lead which are actually concrete type and they are inheriting from the customer base and then they are overriding the validate method as per their requirements ans per their need Create a user interface In the user interface let us consume this business logic what we have created This is actually our middle layer Let me go and rename this Also I would like to mention here I am creating this project in visual studio 2010 Why am I creating at the backwards version people who are using 2012 2013 and 2014 or must be 2016 tomorrow You can easily migrate this project and see the code I am trying to create a version which is five years back So that you can just do a next next wizard and see this code Lets me also rename this class here like Customer.cs Add a new project Let me add a windowsForms here I'll say winform Csutomer and there is a form let me rename this form to a nice name Actually I am creating windows UI to consume this middle layer or the domain object what we have created At this moment UI for me is irrelevant because I want to ensure that my middle layer and my data access layer are properly reusable Bu t I do need a UI tested So I am taking the winform feel free to use other user interfaces like ASP.NET, WebForm or console applications etc I'll say here frmCustomer and on this form you can see I have put all the necessary User Interface which will help us to fill data into our domain object or into our customer class Here is my UI w I am going to consume this middle layer inside my UI winform customer I am going to consume this middle layer inside my winformcustomer here overhere I will say using middle layer We have two types of customers one is a lead and the one is the a simple customer In this UI I have created a very simple combo box I have a simple drop down i'll say rather and this drop down helps me to select what kind of customer I want to use If I select lead and if I do validate then accordingly the lead validation will fire and if I select customer then customer validations will fire I'll go back to my UI Depending on situation I'll say here Private custoemr either this UI will go and create a customer object or probably it will create a lead object In this selected change event if the CustomerType.text which is selected if it is customer then please go ahead and create the object of the customer lets create the object of the lead I'll say here Customer or else go and create the object of lead In the validate button again here also depending on what is selected I will either call the validate of the customer or I will either call the validate of the lead There is one big problem with approach at this moment Before I talk about the problem Let me talk about What is a sign of a good software architecure? If you want to see or if you want to test I will say that a software architecture is good or not He should see that how software architecture reacts when changes happens Whenever a change happens in a software and we have to change at ten places then there is a problem with the software architecture If you see at this moment Tomorrow if I go and add a new customer type over here Let us say I go ahead and I add a new customer class called as gold customer Then look at the places where I have to make to changes First thing change number 1 I have to add that new type here in the form second add in my combo selected event I need to add one more condition that in the validate event I need to add one more if condition I have to make changes at three places and please note at this moment this is a very very simple form If I have 10 such forms like this You can think about what kind of changes can happen in my system A good software architecture is tested when the changes happen and if you are changing in lot of places that means you have not architected your software well First thing is let us see that if we can minimize this changes from atleast three to one Can we bring down these number of code changes I can use polymorphism In other words if you remember both of our classes i.e customer and lead inherits form the customer base class I can create one reference for the whple UI This is customer case and depending on the situation Customer base can now point towards new customer or he can point towards a lead then in the validate I can say cust. validate If you see now When I add a new type I have to only go and change in this section Because of polymorphism This is polymorphism wherein the parent class can point toward his child classes on runtime What do you mean by polymorphism? Polymorphism means change as per situation My custobject is actually have customer base type and depending on situations it can point to customer or it can point to to a lead object One of my personal belief is that the biggest gift form object oriented programming is polymorphism If you see polymorphism in our real world also in our real life Polymorphism means depending on situation you change your self for example At thus moment what I am teaching you I will not be talking about my family work so I am teacher at this moment But the time I go and meet my kids I play with them I don't about my office work At that time I am dad and I just want to ensure that I don't talk any kind of official work In real life people achieve decoupling decoupling means whatever happening in your office you don't take it home Or whatever is happening in your home you don't take it office when you actually do polymorphism And the same here object oreinted world also polymorphism is the biggest gift by which you can achieve decoupling by which you can ensure that when change happens at one place it does not go all over the places Here also by using polymorphism at this moment I am using polymorphism and because of that I have minimize my changes from three to one Still i have to make changes In other words if you see now If somebody goes and add as a new type First thing is he has to go and add The class overhere After that he has to again go back and add A new if condition here in this combo change Think about it if you have ten screens like that then you have to go and do it at ten places Somehow we have to also get rid of this if condition as well form this UI In order to remove this if condition from here We really need to do is we need to get rid of this new keyword Remember what is the whole goal of this exercise we are trying to do removing the if condition and removing the strongly types classes or concrete classes The goal is that when I go and add a new customer type I should not be making changes here If I do want to make changes in my UI Then I need to get rid of these final classes or concrete classes In order to get rid of these classes I need to somehow ensure that the creation of these objects goes into some central class In other words I need to give this object creation to some other library I am going to add a new class here or a new library Who will take away this object creation process from here into that class library I would like to name this class library as factory why factory? because it creates things I am going to add a new project And I will say this project name as factory factory customer In this let me go and create this class as a static class This is my factory This factory class will be responsible for my object creation I am going to add a reference here I will say public create create the customer depending on the type of customer I will move this if condition from here to this factory class Over here I will say if the type of customer If the TypeCust is the customer return a new customer or else return a new lead This class here this factory class here is taking all the responsibilities of creating the object He is aware of all the strong type object If you add a new type he will just go and add one more if condition here But when he returns this strong type he will always return it as the parent based class The base of decoupling is polymorphism Tomorrow if I go and type He will always go and return only customer base My UI now can become something like this I can say here My UI will now go and refer the factory customer class or the library I will say here using factory customer and then in the customer type in the customer type selected event of the combo box I can say here Please use the factory and create the object In my ui I have no reference of the customer class or the least class must be I can search for the lead There is no reference of the strongly type classes By using this simple factory pattern We are able to decouple the user interface from the strongly type classes If somebody goes and adds a new customer type here He has to just go and add that if condition here and that's it All other consumers It can be a UI It can be a batch process It can be anyone They don't have to worry what kind of type is coming from the factory The factory takes the responsibility of creating the object There is one serious problem with this factory class And the problem is the if condition Somehow I have to get rid of this if condition and we need some better approach here Now the good news is if you have polymorphism in action then you can get rid of the if condition If you have polymorphism and if you see lots of if conditions and case statements that means polymorphism has not been exploited to the full Over here I can delete this complete of condition I can create very simple collection here of customer base type go and do something like this I can create a collection base type of dictionary CustomerBase = new dictionary of customer base In the constructor I can add the newly the strong types or the concrete type This is new customer and this is for lead We can go ahead and return the customer type by just doing a look ups so we don't need now the if condition I can say here return custs This custs is a nonstatic variable Inside the static methods you can only access static variable We need to make it static I'll say cust or type cust and returns the type We don't need any more if condition It can be just removed by simple lookup The lookup will work why? because polymorphism is happening internally Basically he will do a lookup It will give out customer that will get automatically type to a Customer Base Its a same kind of output there are some errors let us see what errors are there Let me first rebuild the solution let me see what errors we have Static classes cannot have any instance constructor This has to be static Rebuild again Let me do a F5 If I do a lead It goes it looks up the collection give me back lead type If I do a lookup of a customer There is a customer again does a look up It goes looks up and it gives me a customer type We have a factory class centralized all the new key words are centralized there We successfully got rid of that if condition This getting rid of this if condition by using polymorphism Is termed as RIP pattern RIP means replace if with plymorphism This centralization of object creation is termed as factory pattern There are two kind of factory pattern one is what is discussed by gang of four and this one here is a simple factory pattern This factory here Is termed as a simple factory pattern All over the project just put this word design pattern I will put the name of the pattern Design pattern and name of the pattern If you want to see if you do a Control+Shift+I and if you just search for design pattern You should be able to state forward go and see the reference This factory class can be improved in terms of performance If you look at this moment this customer collections is loaded irrespective you wanted or you don't wanted I want that the customer type should be loaded only on demand When somebody calls this create method at that time the customer collection should be loaded Control+X this I will remove this concept and here I will say if the custs .count = 0 then go and load the types When somebody calls the create method At that time only the customer types are loaded or else they are not loaded without any reasons This pattern is termed as lazy loading One more design pattern here Lazy Loading The opposite if Lazy Loading can be termed as eager loading Lazy Loading means when the objects are needed they are loaded or else they are not loaded Three Design patterns we have covered at this moment Factory pattern Replace If with polymorphism and Lazy Loading I would like to make a statement here One is you know design pattern The other is you should know the automation for the design pattern It is very important that if you have automation for the design pattern You should be using that and not actually coding from scratch For example, for Lazy loading in c# we have a keyword called as Lazy Rather than writing such kind of a If condition and then checking it and then loading it You can just use that Lazy loading keyword I would give this you as home work We have a video in questpondvd which talks about the lazy keyword Use that lazy keyword and replace this If condition of the lazy loading pattern here One is You should know the pattern and the other is in case there is some ready made framework or some ready made component try to use that component Because components are time tested you don't need to reinvent the scratch Take this as a home work Go ahead and replace this if condition or lazy design pattern by using the lazy keyword of C# Let is quickly test our application In the validate We are already getting the type Create a method here saying set customer this method will say cust. customer name = txt customer name .text cust. PhoneNumber = txt Phonenumber.text This method here actually goes and takes a value from the UI and sets to the object Before I call the validate I would like to call the customer here Let us quickly go and test this Basically if he is lead then customer name is compulsory If he is a lead then customer name is compulsory If I put the customer name phone number is also compulsory Then address is not compulsory Its is working bit the time I say this is a customer then even the bill amount is required it cannot be zero Even the address is required Depending on what kind of type I am selecting here He is calling the factory factory gives him that type and depending on that type the validations are happens If I go tomorrow and add a new customer type I don't have to make any change in the UI. In the UI I just have to add that type over here And only what I have to change is in the factory class I need to go in the factory class and just go ahead and add the new type into my collection here This brings us to this One hour of Learn Design Pattern Step by Step In this one hour believe me you have literally cross the sea I am not teaching you design pattern step by step I am not teaching you design pattern academically I am teaching you design pattern practically Once you see this example you will never forget how to use design pattern in your project tomorrow First we start it with design pattern we defined design pattern and we said that design pattern is nothing but learning object oriented programming in a better way they are time tested solution for object oriented programming problems Then we said the design pattern falls into three categories One is the structure category at that when we build our classes when we write our entities Any kind of problems that occurs during that phase will be solved by using the structural design pattern category There is a second category called as creational pattern which revolves around the new keyword then we said there is something called as behavioral pattern which talks about the problems around dynamic nature of objects After that we also defined what is a different between design pattern architecture pattern and architecture style Then we moved ahead and we identified the entities and the objects and the classes by using the noun pronoun and the verb approach After that we identified the relationship between this entities We said there are two kind of relationship One is a is a relationship and one is a has a relationship One is using inheritance and the other is using aggregation, association, composition It is more of a using relationship We went ahead we created the UI We created the classes and properties we created the UI then we said we are having problems with the new customer type. So we said that if new customer types get added then we have to make changes across all over We went ahead and we created the simple factory class This simple factory class is nothing but it actually collects all the new keyword into a centralized location Afterwards we moved ahead we said that this simple factory class is looking good But we need to replace that if condition It had a if condition and that if condition will increase as new types gets added We replace the if with polymorphism That is a second pattern which we implemented with how about improving the performance of this factory class Rather than loading the objects How about loading them in demand We implemented the lazy design pattern We have more seven hour still pending Let me talk about what I am going to cover in the next coming hours In the next coming hour I will be covering something called as strategy pattern Because if you look at this moment The validations are Coupled tightly coupled with the entities We will look into that how to use strategy pattern and improve on this validations We will also see how we can go and automate the factory pattern the simple factory pattern class At this moment if you see we are writing a collection then we are doing a lookup and what not But in reality if you think about it If you want to create lot of these factories like this You would end up into lot of custom coding As I have said in this class also one is you know the design pattern and other is you know how to automate that design pattern What we will do in coming hour we will automate that factory class we will try to remove that collection We'll try to remove that lookup And third we will also implement some simple pattern like prototype pattern and memento pattern The next coming hour is more exciting it is more adventurous We will be learning all of this design pattern practically and not just theatrically Don't forget in case you want to learn pattern by pattern Please see this video series where we have explained pattern by pattern You can take a one pattern we have showed sample code for it You can understand it There is a second pattern Third pattern and so on If yo want to learn pattern by pattern go through that video series If you want to really see patterns happening then this is the video series which you have to go through Thank you so much for bearing me for 1 hour If you really like the series then bear me for the next coming hour as well So seven hour still pending If you don't give up then I will also not give up If you have zeal to learn design pattern actually and practically then I have the zeal to tech you In case you like the series In case you like this 1 hour what you have learnt Please go to facebook.com/questpond and say that I have completed 1 hours I liked it and waiting for the other series Or else if you have any issues and concerns you can also raise those concerns on the facebook page Thank you so much Let us complete the seven hours and let us become a real real architect And let us become a person who knows design pattern actually and not just theoretically Thank You So Much
A2 US customer pattern design pattern design class factory Learn C# Design Patterns Step by Step in 8 hours. 270 25 施文勝 posted on 2015/08/30 More Share Save Report Video vocabulary