PatternsCSharpProgramming/Patterns/1_Принцип единственной обязанности/Program.cs

71 lines
3.0 KiB
C#
Raw Normal View History

2024-10-05 09:15:54 +03:00
/*
* Глава 17: Принцип единственной обязанности (SOLID SRP)
*
* - инкапсуляция сущности с целью организации архитектуры
* приложения, которую будет легко поддерживать и расширять в
* течении всего промежутка эксплуатации
*
* Автор: Роберт Мартин (Дядя Боб)
*
* Принципы:
* 1. Single responsibility - принцип единственной ответственности
* 2. Open-closed - принцип открытости/закрытости
* 3. Liskov substitution - принцип подстановки Барбары Лисков (самый сложный)
* 4. Interface Segregation - принцип разделения интерфейса
* 5. Dependency inversion - принцип инверсии зависисмостей
*/
/*
* Принцип единственной ответственности (англ. single-responsibility principle, SPR) -
* принцип ООП, обозначающий, что каждый объект должен иметь одну ответственность и эта
* ответственность должна быть полностью инкапсулирована в класс.
* Все его поведения должны быть направлены исключительно на обеспечение этой отвественности.
*/
/// <summary>
/// К примеру: Разработать класс который будет работать с изображениями
/// </summary>
abstract class Attach
{
}
class Image : Attach
{
private int width;
private int height;
public int Width => width;
public int Height => height;
private Image(int width, int height) { }
//Добавление других методов предполагающих иной функционал не рационально
//Следуем принципу - декомпозировать - делать максимально минимальные классы под свою ответственность
public static Image CreateImage(int width, int height) { return new Image(width, height); }
}
/// <summary>
/// EMail сервис
/// Если отваливается модуль отправки Email
/// мы чиним только его, нам не требуется разбирать класс Image
/// </summary>
class EmailService
{
private string email;
private string text;
private string subject;
private Attach[] attach;
public EmailService(string email,
string text = "",
string subject = "",
params Attach[] args)
{ }
public void SendTo(string email, string text, string subject) { }
}
class Program
{
public static void Main(string[] argv)
{
}
}