发布日期:2024-08-10 03:09 点击次数:177
短视频单一职责原则(Single Responsibility Principle)指出,就一个类而言,应该仅有一个引起它变化的原因。换句话说,一个类的功能要单一,则只作念与它关联的事情。一个类应该唯惟一个引起该类变化的原因。这么成心于升迁类的可珍贵性和可复用性。若是一个类完成独特的不太关联的功能能够完成其他类的功能,这就会使得引起一个类变化的要素太多。若是类的一处需要修改,其他和它关联连的代码齐会受到影响,这就告成导致一朝系统出现了问题就难以调试逆境,同期也尽头不利于珍贵。完了单一职责原则要扎眼以下重点:功能单一性: 一个类或模块只认真一项特定的功能或举止。高内聚性: 类里面的各个措施和属性齐应该良好关联,完了一个特定的功能或推敲。低耦合性: 类与类之间的依赖应该尽可能的低,一个类的变化不应该影响到其他类。撤职这么推敲的兴趣在于:升迁代码的可读性和可珍贵性: 因为每个类齐专注于特定的功能,代码逻辑更明晰,易于斟酌和修改。缩小变更引入作假的风险: 唯独与功能关联的类需要被修改,不会影响到其它不关联的部分。促进代码复用: 功能单一的类更容易被其它模块或形势复用,加多系统的生动性和可延迟性。这里推敲一个纵情的订单系统来线路在推敲时怎么撤职单一职责原则。先来看一个违抗原则的例子。 1#include<iostream> 2#include<string> 3#include<vector> 4 5usingnamespacestd; 6 7// Order 类认真订单的创建和存储 8classOrder { 9private:10int orderId;11string customerName;12vector<string> orderItems;1314public:15 Order(int id, conststring& name) : orderId(id), customerName(name) {}1617voidaddItem(conststring& item){18 orderItems.push_back(item);19 }2021voidsave(){22// 简化的保存订单的操作,这里假定进行数据库存储23cout << "Saving order " << orderId << " for customer " << customerName << " to the database." << endl;24 }2526voidprint(){27// 打印订单的执行28cout << "Order ID: " << orderId << endl;29cout << "Customer Name: " << customerName << endl;30cout << "Order Items:" << endl;31for (constauto& item : orderItems) {32cout << "- " << item << endl;33 }34 }35};3637intmain(){38Order order(1, "John Doe");39 order.addItem("Product A");40 order.addItem("Product B");4142 order.print();43 order.save();4445return;46}在该示例中,‘’Order‘’ 类不仅认真订单的创建和存储(‘’addItem‘’ 和 ‘’save‘’ 措施),还认真打印订单的信息(‘’print‘’ 措施)。这违抗了单一职责原则,因为一个类应该只认真一个功能。优化示例将订单的打印功能单独索要出来,变成一个新的类来认真打印订单的信息。 1#include<iostream> 2#include<string> 3#include<vector> 4 5usingnamespacestd; 6 7// Order 类仅认真订单的创建和存储 8classOrder { 9private:10int orderId;11string customerName;12vector<string> orderItems;1314public:15 Order(int id, conststring& name) : orderId(id), customerName(name) {}1617voidaddItem(conststring& item){18 orderItems.push_back(item);19 }2021voidsave(){22// 简化的保存订单的操作,这里假定进行数据库存储23cout << "Saving order " << orderId << " for customer " << customerName << " to the database." << endl;24 }2526// 去除打印功能27};2829// OrderPrinter 类认真订单的打印30classOrderPrinter {31public:32staticvoidprint(const Order& order){33cout << "Order ID: " << order.orderId << endl;34cout << "Customer Name: " << order.customerName << endl;35cout << "Order Items:" << endl;36for (constauto& item : order.orderItems) {37cout << "- " << item << endl;38 }39 }40};4142intmain(){43Order order(1, "John Doe");44 order.addItem("Product A");45 order.addItem("Product B");4647 OrderPrinter::print(order); // 使用单独的 OrderPrinter 类打印订单信息4849 order.save();5051return;52}在新的代码中,色人居界说了一个新的 ‘’OrderPrinter‘’ 类,特意认真订单信息的打印。这么作念的克己是,‘’Order‘’ 类咫尺只关怀订单的创建和存储,而 ‘’OrderPrinter‘’ 类认真处理订单信息的展示,每个类齐撤职了单一职责原则。撤职单一职责原则会给测试带来极大的便捷,抵牾单一职责原则也会缩小类的内聚性,增强类的耦合性,咫尺软件缔造的经典格式MVC格式,尽头好地体现了单一职责原则。MVC(Model-ViewControl)即是模子、视图、为止器三层架构格式,其中M是指数据模子,V是指用户界面【DKBO-002】ブルセラ 屋外露出DX 22006-03-16OFFICE K’S&$露(ラハイナ東118分钟【DKBO-002】ブルセラ 屋外露出DX 22006-03-16OFFICE K’S&$露(ラハイナ東118分钟,C则是为止器。领受MVC格式使得数据和进展相差别,消除个数据层不错有不同的露出层。数据层和露出层的改动互不影响。这就尽头成心于升迁软件的可珍贵性和可复用性,同期也便捷 了软件的经管责任和升迁软件缔造成果。除了单一职责原则外还有哪些原则呢?请合手续关怀,下一篇继续深远了解软件架构推敲的原则。我是艾柯,别称镶嵌式软件工程师。关怀我,带你了解更多镶嵌式干货。铭记点赞,共享,点亮在看,你们的饱读舞是我合手续共享的最大能源!咱们下次见。