当您想要同时执行多个功能时,如何遵守SRP ?



单一责任原则(SRP)说下一个:

一个模块应该对一个且只有一个参与者负责

一个类应该有且只有一个改变的理由

通过这个,我理解一个函数只应该有一个任务要完成。但是,当我想一个接一个地执行两个(或更多)函数,并且我不想调用其中一个而不调用另一个时,会发生什么?

我举个例子:

我有这些函数

void createProduct(){/*...*/};
void notifyUsers(){/*...*/};

我总是创建一个产品,我想通知我的用户。那么,我是否应该创建这个函数并调用它们而不是调用它们:

void createAndNotify(){
createProduct();
notifyUsers();
}

或者这违反了SRP,我应该每次都这样称呼这两个主题?

createProduct();
notifyUsers();

即使你总是想在创建产品时通知用户,让一个类负责两者的问题是,你将通知的发送与产品的创建紧密地耦合在一起,这是两个独立的问题。

也许将来你想要改变通知的发送方式,例如电子邮件变成推送通知。您当前的设计意味着更改通知代码可能会破坏您的产品创建代码。他们之间没有足够的隔离。

松散耦合的一种方法是有一个类用于创建产品,例如ProductService,一个类用于执行通知,例如NotificationService。ProductService可以发布一个事件(最好是发布到某种类型的事件总线),NotificationService可以侦听并响应该事件。

最新更新