Поиск подходящего шаблона для обработки данных для входа - PullRequest
0 голосов
/ 12 мая 2010

Я работаю над контроллером, который обрабатывает логины для веб-приложения. Эти логины будут поступать от нескольких клиентов, но все они будут содержать одинаковые данные. Однако, в зависимости от клиента, эти данные будут по-разному интерпретироваться для общих веб-приложений.

Например, у нас есть код пользователя, который отправляется, и в одном случае мы можем использовать первые четыре цифры кода, а в другом случае 12 цифр кода для сопоставления с полем на объекте User.

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

Каково ваше мнение?

Ответы [ 2 ]

1 голос
/ 12 мая 2010

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

Я бы просто преобразовал «большие неприятные блоки логики if» в класс, который решает, что делать с данными. Возможно, что-то вроде этого (код PHP):

class UserCodeHandler {

 private $userCode;
 private $client;

 public function __construct($userCode, $client) {

  $this->userCode = $userCode;
  $this->client = $client;
 }

 public function manipulateData() {

  switch ($this->client) {
   case 'clientA':
    $this->doSomething();
    break;
   case 'clientB':
    $this->doSomethingElse();
    break;
  }
 }

 private function doSomething() {
  //does stuff with first 4 digits of the user code.
 }

 private function doSomethingElse() {
  //does stuff with 12 digits of the user code.
 }
}

Затем вы можете использовать его так:

$userCodeHandler = new UserCodeHandler($data, $client);
$userCodeHandler->manipulateData();

Это исключит всю условную логику из контроллера и позволит вам повторно использовать код в других контроллерах.

0 голосов
/ 14 мая 2010

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

class Client
{
    public static function factory($client_type)
    {
        $classname = 'Client_' . $client_type;

        return new $classname;
    }
}

class Client_TypeA
{
    public function doSomething()
    {
        // do something specific to TypeA clients
    }
}

class Client_TypeB
{
    public function doSomething()
    {
        // do something specific to TypeB clients
    }
}

$client = Client::factory('TypeA');
$client->doSomething();
...