【发布时间】:2020-02-25 11:35:41
【问题描述】:
让我们考虑以下示例:
class User
{
}
class FirstUseNotification
{
function show(User user)
{
// check if it was already shown, return if so
// show a notification
// mark it as shown in the db or whatever
}
}
class SomeController
{
function someMethod()
{
firstUseNotification->show(user);
}
}
show() 方法似乎通过做 3 件事来打破单一职责。所以我认为这可以重写为:
class User
{
}
class FirstUseNotification
{
function show(User user)
{
// show a notification
}
function shouldShow(User user)
{
// return true if not yet shown
}
function markAsShown(User user)
{
// flag notification as shown
}
}
class SomeController
{
function someMethod()
{
if (firstUseNotification->shouldShow(user))
{
firstUseNotification->show(user);
firstUseNotification->markAsShown(user);
}
}
}
这就是我感兴趣的:
- 我是否正确假设在第二个示例中,通知类现在可以使用单一职责原则?
- show() 方法中发生的所有事情都消失了,但是......它们只是重新定位到控制器中的方法,所以这不应该意味着这个控制器方法现在破坏了单一职责吗?如果是这样,如何才能遵守?
【问题讨论】:
标签: oop solid-principles single-responsibility-principle