Я думаю, что одна из главных причин того, что у вас так много, если / еще, заключается в том, что у вас нет бизнес-логики в самом объекте, но вы пытаетесь использовать бизнес-логику извне.Поскольку я не понимаю, какова ваша бизнес-логика, моя реализация может не сработать в вашем случае, но я хочу показать вам, как избавиться от if if в простом случае.Основная цель - не использовать свойства, а только использовать функции и позволить объекту самостоятельно обрабатывать свое состояние.(поиск Tell Dont Ask и State Pattern)
давайте посмотрим на этот класс
public class User
{
string name { get; set; }
bool isDisabled { get; set; }
}
, используя его, возможно, вот так
if (!user.isDisabled)
{
user.name = nameFromApi
}
, но в этом случае у вас естьповторить это на каждом углу, где вы хотите использовать пользователя.Так что рассмотрите это
public interface IUser
{
string name { get; }
IUser updateName(string newName);
IUser disableUser();
}
public class DisabledUser : IUser
{
public DisabledUser(IUser activeUser)
{
this.name = activeUser.name;
}
public string name { get; }
public IUser updateName(string newName)
{
return this;
}
public IUser disableUser()
{
return new DisabledUser(this);
}
}
public class ActiveUser : IUser
{
public ActiveUser(IUser user)
{
this.name = user.name;
}
public string name { get; private set; }
public IUser updateName(string newName)
{
this.name = newName;
return this;
}
public IUser disableUser()
{
return new DisabledUser(this);
}
}
Таким образом, если if пропало, и вы действительно получили что-то другое: вы можете легко расширить реализацию с другими состояниями, такими как banned, и вам не нужно менять старую реализацию.Да, это больше кода, но проще в обслуживании.В вашем случае, я думаю, вы сможете избавиться от всех if / elses относительно логических флагов, если вы правильно инициализируете объекты.Это мощный шаблон, и вам не нужно ничего разыгрывать, чтобы иметь возможность использовать пользователя.Я не знаю ваш сценарий использования количества, поэтому я не могу сказать вам, как это можно решить, но, безусловно, есть способ сделать это.