Я читал чистый код Роберта С. Мартина и изучал твердые принципы, я заметил в своем классе такой код:
@When("^they click the (.*) hyperlink$")
public void the_browser_opens_a_new_hyperlink(String link) {
Runnable aSyncTask = null;
switch (link.toLowerCase()) {
case "cookie":
aSyncTask =
() -> {
{
loginPage.openCookieInformationPage();
loginPage.switchToNewestTab();
}
};
break;
case "privacy policy":
aSyncTask =
() -> {
{
loginPage.openPrivacyPolicyInformationPage();
loginPage.switchToNewestTab();
}
};
break;
case "report a problem":
aSyncTask =
() -> {
{
loginPage.openReportAProblemPage();
loginPage.switchToNewestTab();
}
};
break;
}
driverTabHelper.execAsyncTaskThatLaunchesATab(Objects.requireNonNull(aSyncTask, "invalid link specified"));
}
Это явное нарушение принципа открытого / закрытогопотому что чем больше ссылок я добавляю, мне придется продолжать модифицировать этот метод, чтобы учесть их.
Как вы можете видеть, loginPage в настоящее время предоставляет 3 разные ссылки в виде строк для этого метода, однако будет большеобъекты, передающиеся в ссылках на более позднем этапе.
Как мне переписать это для полиморфизма?Я подумал, может быть, страницы (ы) реализуют IOpenHyperlink
и используют ссылку на интерфейс в качестве аргумента, но страницы могут предоставить несколько ссылок, добавить интерфейс для каждой ссылки?Кажется чрезмерным
Также очень ценятся любые советы по улучшению кода здесь.
Спасибо