2010-07-17 3 views
2

Привет, У меня есть проблема, когда мне приходится выполнять аналогичные шаги/действия (которые немного отличаются) на разных наборах данных (данные могут быть немного разными и в отношении его структуры). Есть несколько шагов, которые мне нужно выполнить: подключайте, проверяйте, создавайте сообщения об ошибках, если необходимо, изменяйте привязку данных в заданный формат и выдавайте результаты.Когда использовать шаблон шаблона метода

Я смотрел шаблон шаблона шаблона, который выглядит так, как будто он подходит для этого довольно хорошо - это правильно звучит или будет лучший способ решить эту проблему?

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

Я использую php.

ответ

1

Метод стратегии хорошо работает с шаблонным методом.

Метод шаблона определяет требования к классу. Метод стратегии позволяет использовать объекты для определения поведения и определять их во время выполнения с использованием инъекции зависимостей.

class CRUDTemplate 
{ 
    protected $updater; 
    protected $creator; 
    protected $deletor; 
    protected $loader; 

    public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader) 
    { 
      $this->updater = $updater; 
      //...snipped... 
    } 

    // sample template function; others are create, delete, update 
    public function load($id) 
    { 
      $this->content = $this->loader->load($id); 
    } 
} 

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

Плюсы в том, что для примера выше вы можете использовать различные различные стратегии для разных условий (CRUD не может быть лучшим примером здесь). Поэтому, если вы хотите изменить способ вывода данных, но сохраните, как они сохраняются/создаются/загружаются, вам просто нужно изменить стратегию вывода.

Недостатки в том, что вы должны убедиться, что стратегии предназначены для правильного контекста, так как нет проверки типов, чтобы гарантировать, что стратегии, которые вы проходите, действительны (любой будет работать до тех пор, пока он имеет базовый класс expectd). О да, CRUDTemplate можно было бы получить и из базового класса.

Для данных в PHP я обнаружил, что массив работает лучше всего для передачи сложных параметров. Конечно, вы должны сделать свою проверку массива