SOLID Principles
-
Upload
teja-swaroop -
Category
Documents
-
view
22 -
download
2
Transcript of SOLID Principles
![Page 1: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/1.jpg)
Are WE <programming/>
Is it in right way
?
![Page 2: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/2.jpg)
Regular Programming
• Scenario-1:
class Customer { public void Add() {
try { // Some logic goes here
} catch (Exception ex) { System.IO.File.WriteAllText(@"c:\Error.txt",
ex.ToString());
} }
}
![Page 3: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/3.jpg)
SRP (Single Responsibility Principle)
class FileLogger { public void Handle(string error) { System.IO.File.WriteAllText(@"c:\Error.txt", error); }}
class Customer { private FileLogger obj = new FileLogger(); public virtual void Add() { try {
// logic goes here } catch (Exception ex) {
obj.Handle(ex.ToString()); } } }
![Page 4: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/4.jpg)
Scenario-2:
class Customer { private int _CustType; public int CustType {
get { return _CustType;
} set {
_CustType = value; }
} public double getDiscount(double TotalSales) {
if (_CustType == 1) { return TotalSales - 100;
} else { return TotalSales - 50;
} }
}
![Page 5: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/5.jpg)
Open closed principle
class Customer { public virtual double getDiscount(double TotalSales) {
return TotalSales; }
}
class SilverCustomer : Customer { public override double getDiscount(double TotalSales) {
return base.getDiscount(TotalSales) - 50; }
}
class goldCustomer : SilverCustomer { public override double getDiscount(double TotalSales) {
return base.getDiscount(TotalSales) - 100; }
}
![Page 6: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/6.jpg)
class Enquiry : Customer { public override double getDiscount(double TotalSales) {
return base.getDiscount(TotalSales) - 5; } public override void Add() {
throw new Exception("Not allowed"); }
}
Scenario-3:
Customer
Gold Silver Enquiry
![Page 7: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/7.jpg)
interface IDiscount { double getDiscount(double TotalSales);
}
interface IDatabase { void Add();
}
class Enquiry : IDiscount {public double getDiscount(double TotalSales) {
return TotalSales - 5; }
}
![Page 8: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/8.jpg)
class Customer : IDiscount, IDatabase {private MyException obj = new MyException();public virtual void Add() {
try { // logic goes here
} catch (Exception ex) { obj.Handle(ex.Message.ToString()); }
} public virtual double getDiscount(double TotalSales) {
return TotalSales; }
}
LSP (Liskov Substitution Principle)
![Page 9: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/9.jpg)
Customer
Client-1
Client-4
Client-3
Client-2
interface IDatabase {void Add(); // old client are happy with these.void Read(); // Added for new clients.
}
Scenario-4:
![Page 10: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/10.jpg)
ISP (Interface Segregation principle)
interface IDatabaseV1 : IDatabase // Gets the Add method { void Read();
}
class CustomerwithRead : IDatabase, IDatabaseV1 { public void Add() {
Customer obj = new Customer();Obj.Add();
}Public void Read() {
// Implements logic for read }
}
IDatabase i = new Customer(); // old clients not touched i.Add();
IDatabaseV1 iv1 = new CustomerWithread(); // new clients Iv1.Read();
![Page 11: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/11.jpg)
interface ILogger {void Handle(string error);
}
class FileLogger : ILogger { public void Handle(string error) { System.IO.File.WriteAllText(@"c:\Error.txt", error); }
}
class EventViewerLogger : ILogger {public void Handle(string error) {
// log errors to event viewer }
}
class EmailLogger : ILogger { public void Handle(string error) {
// send errors in email }
}
Scenario-5:
![Page 12: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/12.jpg)
class Customer : IDiscount, IDatabase {private IException obj; public virtual void Add(int Exhandle) { try {
// logic goes here } catch (Exception ex) {
if (Exhandle == 1) { obj = new MyException();
} else { obj = new EmailException();
} obj.Handle(ex.Message.ToString());
} }
![Page 13: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/13.jpg)
class Customer : IDiscount, IDatabase {private Ilogger obj; public Customer(ILogger i) {
obj = i; }
}
Dependency Inversion Principle
IDatabase i = new Customer(new EmailLogger());
IDatabase i = new Customer(new FileLogger());
IDatabase i = new Customer(new EverViewLogger());
Or
Or
![Page 14: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/14.jpg)
Hence..
• SRP - Single Responsibility Principle• OCP - Open Closed Principle• LSP - Liskov Substitution Principle• ISP – Interface Segregation Principle• DIP - Dependency Inversion Principle
![Page 15: SOLID Principles](https://reader036.fdocuments.in/reader036/viewer/2022082815/55d078f7bb61eb5f318b4724/html5/thumbnails/15.jpg)
Thank You
& Lets program
Teja Swaroop . M
S O L I D