翼度科技»论坛 编程开发 .net 查看内容

面向对象设计的六大原则(SOLID原则)-——单一职责原则

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
单一职责原则(Single Responsibility Principle, SRP)是面向对象编程和设计的五大SOLID原则之一。它强调一个类、方法或模块应该只有一个职责,即只做一件事情。如果一个类承担的职责过多,那么它的可维护性、可读性和可扩展性都会受到影响。当需要修改类的某个职责时,可能会影响到其他职责的实现,导致不必要的代码改动和潜在的bug。
详细解释

一个类应该只有一个引起变化的原因。这意味着,如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。
应用场景及代码示例(C#)

场景1:日志记录类

描述:一个类只负责日志的记录,包括日志的写入、格式化等。
代码示例
  1. public interface ILogger  
  2. {  
  3.     void Log(string message);  
  4. }  
  5.   
  6. public class ConsoleLogger : ILogger  
  7. {  
  8.     public void Log(string message)  
  9.     {  
  10.         Console.WriteLine($"Logged: {message}");  
  11.     }  
  12. }  
  13.   
  14. public class FileLogger : ILogger  
  15. {  
  16.     private readonly string _filePath;  
  17.   
  18.     public FileLogger(string filePath)  
  19.     {  
  20.         _filePath = filePath;  
  21.     }  
  22.   
  23.     public void Log(string message)  
  24.     {  
  25.         File.AppendAllText(_filePath, $"Logged: {message}{Environment.NewLine}");  
  26.     }  
  27. }
复制代码
在这个例子中,ConsoleLogger 和 FileLogger 都实现了 ILogger 接口,但它们各自只负责一种日志记录方式。
场景2:用户认证类

描述:一个类只负责用户的登录、注册和身份验证等功能。
代码示例
  1. public interface IAuthenticationService  
  2. {  
  3.     bool RegisterUser(User user);  
  4.     bool LoginUser(string username, string password);  
  5.     bool IsUserAuthenticated(string token);  
  6. }  
  7.   
  8. public class AuthenticationService : IAuthenticationService  
  9. {  
  10.     // 假设这里有一些用户存储和验证逻辑...  
  11.     public bool RegisterUser(User user)  
  12.     {  
  13.         // 注册用户逻辑...  
  14.         return true; // 示例返回值  
  15.     }  
  16.   
  17.     public bool LoginUser(string username, string password)  
  18.     {  
  19.         // 登录用户逻辑...  
  20.         return true; // 示例返回值  
  21.     }  
  22.   
  23.     public bool IsUserAuthenticated(string token)  
  24.     {  
  25.         // 验证用户逻辑...  
  26.         return true; // 示例返回值  
  27.     }  
  28. }
复制代码
在这个例子中,AuthenticationService 类实现了 IAuthenticationService 接口,并且只负责用户认证相关的操作。
场景3:订单处理类

描述:一个类只负责订单的创建、修改和取消等功能。
代码示例
  1. public class Order  
  2. {  
  3.     // 订单属性...  
  4. }  
  5.   
  6. public interface IOrderService  
  7. {  
  8.     Order CreateOrder(Order order);  
  9.     Order UpdateOrder(Order order);  
  10.     void CancelOrder(Order order);  
  11. }  
  12.   
  13. public class OrderService : IOrderService  
  14. {  
  15.     public Order CreateOrder(Order order)  
  16.     {  
  17.         // 创建订单逻辑...  
  18.         return order; // 示例返回值  
  19.     }  
  20.   
  21.     public Order UpdateOrder(Order order)  
  22.     {  
  23.         // 更新订单逻辑...  
  24.         return order; // 示例返回值  
  25.     }  
  26.   
  27.     public void CancelOrder(Order order)  
  28.     {  
  29.         // 取消订单逻辑...  
  30.     }  
  31. }
复制代码
在这个例子中,OrderService 类实现了 IOrderService 接口,并且只负责订单处理相关的操作。它不包含与订单无关的逻辑,比如库存管理或用户认证。
 

来源:https://www.cnblogs.com/forges/p/18067523
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具