Как написать этот код более сухой? Есть что-то, что меня беспокоит. Я проверяю, являются ли категории и сообщения пустыми, используя условие ИЛИ. Однако я должен проверить эти два условия снова после входа в систему. С уважением …
if($app->getCategories()==null || $app->getPosts()==null ) { if(isset($_POST['username'])&& isset($_POST['password'])) { if($app->login($_POST)!=false) { if($app->getCategories()==null) { $app->installCategories(); } if($app->getPosts()==null) { $app->installPosts(); } } } else { echo $app->login(); } }
В качестве одного из способов оптимизации я бы предложил создать логические переменные, чтобы избежать выполнения getCategories
а также getPosts
методы дважды.
На мой взгляд, трудно предложить другие рефакторинги для вашего кода без знания бизнес-логики вашего приложения.
$noCategories = $app->getCategories() == null;
$noPosts = $app->getPosts() == null;
if($noCategories || $noPosts) {
if(isset($_POST['username']) && isset($_POST['password'])) {
if($app->login($_POST)!=false) {
if($noCategories)
$app->installCategories();
if($noPosts)
$app->installPosts();
}
}
else {
echo $app->login();
}
}
if(isset($_POST['username']) && isset($_POST['password'])) {
if($app->login($_POST)) {
($app->getCategories() ? '' : $app->installCategories());
($app->getPosts() ? '' : $app->installPosts());
}
} else {
echo $app->login();
}
Может быть, попробуйте это: слишком много вложенных, если плохо по многим причинам 🙁
$categories = $app->getCategories();
$posts = $app->getPosts();
if($categories == null || $posts == null) {
if(! isset($_POST['username']) || ! isset($_POST['password'])) {
echo $app->login();
}
if($app->login($_POST) != false && $categories == null) {
$app->installCategories();
}
if($app->login($_POST) != false && $posts == null) {
$app->installPosts();
}
}
$isCategoriesNull = $app->getCategories() == null;
$isPostsNull = $app->getPosts() == null;
$postKeysToCheck = ['username', 'password'];
if ($isCategoriesNull || $isPostsNull) {
if (!array_diff($postKeysToCheck, array_keys($_POST))) {
if ($app->login($_POST) != false) {
if ($isCategoriesNull) $app->installCategories();
if ($isPostsNull) $app->installPosts();
}
} else {
echo $app->login();
}
}