CSharp: The single-responsibility principle (SRP) in donet core 6
Single Responsibility Principle SOLID Design Patterns
SOLID is an acronym for five principles of architecture.
S – Single Responsibility Principle
O – Open Close Principle
L – Liskov Substitution Principle
I –Interface Segregation Principle
D – Dependency Inversion Principle
namespace SRP;
/// <summary>
/// 书,geovindu
/// </summary>
public class Book
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
///书的标题,书名
/// </summary>
public string? Title { get; set; }
}
/// <summary>
/// 书店
/// </summary>
public class BookStore
{
/// <summary>
///
/// </summary>
private static int _lastId = 0;
/// <summary>
///
/// </summary>
private static List<Book> _books;
/// <summary>
///
/// </summary>
public static int NextId => ++_lastId;
/// <summary>
///
/// </summary>
static BookStore()
{
_books = new List<Book>
{
new Book
{
Id = NextId,
Title = "一些很酷的电脑书"
}
};
}
/// <summary>
/// 书列表
/// </summary>
public IEnumerable<Book> Books => _books;
/// <summary>
/// 保存
/// </summary>
/// <param name="book"></param>
public void Save(Book book)
{
// Create the book when it does not exist,
// otherwise, find its index and replace it
// by the specified book.
if (_books.Any(x => x.Id == book.Id))
{
var index = _books.FindIndex(x => x.Id == book.Id);
_books[index] = book;
}
else
{
_books.Add(book);
}
}
/// <summary>
/// 加载指定ID的书
/// </summary>
/// <param name="bookId"></param>
/// <returns></returns>
public Book? Load(int bookId)
{
return _books.FirstOrDefault(x => x.Id == bookId);
}
}
/// <summary>
/// 出版社
/// </summary>
public class BookPresenter
{
/// <summary>
/// 显示书
/// </summary>
/// <param name="book"></param>
public void Display(Book book)
{
Console.WriteLine($"书名: {book.Title} ({book.Id})");
}
}
/// <summary>
///
/// </summary>
public class Program
{
/// <summary>
///
/// </summary>
private static readonly BookStore _bookStore = new();
/// <summary>
///
/// </summary>
private static readonly BookPresenter _bookPresenter = new();
/// <summary>
///
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
var run = true;
do
{
Console.Clear();
Console.WriteLine("请选择:");
Console.WriteLine("1: 获取并显示图书id 1");
Console.WriteLine("2: 找不到书");
Console.WriteLine("3: 书是不存在的");
Console.WriteLine("4: 创建一个无序的账簿");
Console.WriteLine("5: 把书陈列在别的地方");
Console.WriteLine("6: 创建一本书");
Console.WriteLine("7: 列出所有书");
//...
Console.WriteLine("0: 退出");
var input = Console.ReadLine();
Console.Clear();
try
{
switch (input)
{
case "1":
FetchAndDisplayBook();
break;
case "2":
FailToFetchBook();
break;
case "3":
BookDoesNotExist();
break;
case "4":
CreateOutOfOrderBook();
break;
case "5":
DisplayTheBookSomewhereElse();
break;
case "6":
CreateBook();
break;
case "7":
ListAllBooks();
break;
case "0":
run = false;
break;
default:
Console.WriteLine("无效的选择!");
break;
}
Console.WriteLine("按回车键返回主菜单.");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("出现以下异常,请按回车继续:");
Console.WriteLine(ex);
Console.ReadLine();
}
} while (run);
}
/// <summary>
///
/// </summary>
private static void FetchAndDisplayBook()
{
var book = _bookStore.Load(1);
_bookPresenter.Display(book!);
}
/// <summary>
///
/// </summary>
private static void FailToFetchBook()
{
// This cannot happen anymore, this has been fixed automatically.
}
/// <summary>
///
/// </summary>
private static void BookDoesNotExist()
{
var book = _bookStore.Load(999);
if (book == null)
{
// Book does not exist
}
}
/// <summary>
///
/// </summary>
private static void CreateOutOfOrderBook()
{
var book = new Book
{
Id = 4, // this value is not enforced by anything and will be overriden at some point.
Title = "有些是坏的书"
};
_bookStore.Save(book);
_bookPresenter.Display(book);
}
/// <summary>
///
/// </summary>
private static void DisplayTheBookSomewhereElse()
{
Console.WriteLine("这现在是可能的,但我们需要一个新的出版人; 还不是100 % !");
}
/// <summary>
///
/// </summary>
private static void CreateBook()
{
Console.Clear();
Console.WriteLine("请输入书名: ");
var title = Console.ReadLine();
var book = new Book { Id = BookStore.NextId, Title = title };
_bookStore.Save(book);
}
/// <summary>
///
/// </summary>
private static void ListAllBooks()
{
foreach (var book in _bookStore.Books)
{
_bookPresenter.Display(book);
}
}
输出:
请选择: 1: 获取并显示图书id 1 2: 找不到书 3: 书是不存在的 4: 创建一个无序的账簿 5: 把书陈列在别的地方 6: 创建一本书 7: 列出所有书 0: 退出 书名: 一些很酷的电脑书 (1) 书名: geovindu (2) 书名: 涂聚文 (3) 按回车键返回主菜单.
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号