单一责任原则(SRP)说下一个:
一个模块应该对一个且只有一个参与者负责
或
一个类应该有且只有一个改变的理由
通过这个,我理解一个函数只应该有一个任务要完成。但是,当我想一个接一个地执行两个(或更多)函数,并且我不想调用其中一个而不调用另一个时,会发生什么?
我举个例子:
我有这些函数
void createProduct(){/*...*/};
void notifyUsers(){/*...*/};
我总是创建一个产品,我想通知我的用户。那么,我是否应该创建这个函数并调用它们而不是调用它们:
void createAndNotify(){
createProduct();
notifyUsers();
}
或者这违反了SRP,我应该每次都这样称呼这两个主题?
createProduct();
notifyUsers();
即使你总是想在创建产品时通知用户,让一个类负责两者的问题是,你将通知的发送与产品的创建紧密地耦合在一起,这是两个独立的问题。
也许将来你想要改变通知的发送方式,例如电子邮件变成推送通知。您当前的设计意味着更改通知代码可能会破坏您的产品创建代码。他们之间没有足够的隔离。
松散耦合的一种方法是有一个类用于创建产品,例如ProductService,一个类用于执行通知,例如NotificationService。ProductService可以发布一个事件(最好是发布到某种类型的事件总线),NotificationService可以侦听并响应该事件。