Перечисление по сравнению со Справочной таблицей по сравнению с Перечислимым отражением по сравнению с шаблоном состояния

У меня были проблемы с переопределением длины TabController.

Решением было создать TabController только один раз в initState и dispose его (только один раз) - притвориться, что TabController length - это просто максимальная длина, если вы думаете, что ваше приложение будет максимальное число 100, тогда используйте фиксированное значение 100.

Пожалуйста, посмотрите в этом ответе

.

6
задан Jeff 4 March 2009 в 06:52
поделиться

3 ответа

Я создал бы класс Состояния, который содержит различия, и назовите их. Таким образом (в 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])

Быстрый, легкий сохранить функциональность разделенной, и с разумным шаблоном наследования между состояниями можно совместно использовать функции, которые не отличаются.

3
ответ дан 10 December 2019 в 00:45
поделиться

мое понимание - то, что шаблон состояния довольно хорош для 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;
}

я не рассматриваю это как изящное решение, поскольку мне все еще нужны или перечисление или в справочная таблица для сохранения состояния приложения в базу данных

0
ответ дан 10 December 2019 в 00:45
поделиться

Вы не должны опрыскивать свой код этой проверкой везде

if (application.Status == Status.New)
{ //do something }
else if (application.Status == Status.Closed)
{ //do other things }

Вместо этого используйте шаблон состояния. Измените состояние каждый раз, когда режим изменений приложений и переводит все Ваши вызовы к методам состояния. Вы будете иметь намного более чистый и легче поддержать код.

Что касается изменения состояния, которое ничего не имеет, делают с шаблоном состояния. Таким образом, можно использовать, какой бы ни подход изящен.

7
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: