У меня были проблемы с переопределением длины TabController
.
Решением было создать TabController
только один раз в initState
и dispose
его (только один раз) - притвориться, что TabController length
- это просто максимальная длина, если вы думаете, что ваше приложение будет максимальное число 100, тогда используйте фиксированное значение 100.
Пожалуйста, посмотрите в этом ответе
.
Я создал бы класс Состояния, который содержит различия, и назовите их. Таким образом (в Python):
class StatusZero(object):
def call_me(self, app):
print 'Hello, from ' + app.name
return db.prepare_specific_status_zero_request()
class StatusOne(object):
def call_me(self, app):
print 'Hi, from ' + app.name
return db.prepare_specific_status_one_request()
states = { 'status_zero' : StatusZero(), 'status_one' : StatusOne() }
class Application(object):
name = 'My App'
status = states['status_zero']
def change_state(self, state):
status = state
def call_me(self):
state_key = self.status.call_me(self)
self.change_state(states[state_key])
Быстрый, легкий сохранить функциональность разделенной, и с разумным шаблоном наследования между состояниями можно совместно использовать функции, которые не отличаются.
мое понимание - то, что шаблон состояния довольно хорош для UI только или в памяти только выполнение, где в моей ситуации при получении данных назад из таблицы приложения, все еще еще должно быть то, если оператор для определения что объект бросить к.
public AbstractApplication convert_db_application_to_object(obj db_application)
{
AbstractApplication app;
if (db_application.Status == (int)Status.New)
app = application_factory.create(application_state_new);
else if(db_application.Status == (int)Status.Closed)
app = application_factory.create(application_state_closed);
return app;
}
я не рассматриваю это как изящное решение, поскольку мне все еще нужны или перечисление или в справочная таблица для сохранения состояния приложения в базу данных
Вы не должны опрыскивать свой код этой проверкой везде
if (application.Status == Status.New)
{ //do something }
else if (application.Status == Status.Closed)
{ //do other things }
Вместо этого используйте шаблон состояния. Измените состояние каждый раз, когда режим изменений приложений и переводит все Ваши вызовы к методам состояния. Вы будете иметь намного более чистый и легче поддержать код.
Что касается изменения состояния, которое ничего не имеет, делают с шаблоном состояния. Таким образом, можно использовать, какой бы ни подход изящен.