Какой шаблон дизайна я должен использовать? - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть студенческое административное приложение.Теперь я должен реализовать новую часть этого приложения, которая дает советы (в стиле текста) в зависимости от оценок ученика.Таким образом, у нас есть 1 "алгоритм" и 4 (на данный момент) различных текста ( вариации ) в качестве вывода).

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

Ответы [ 2 ]

4 голосов
/ 08 ноября 2011

Я думаю, вы переборщили это.

Это довольно простая проблема с алгоритмом поиска.Ваш домен состоит из студентов (которым нужен совет), советов (которые содержат знания) и какого-либо поставщика, который будет содержать алгоритм поиска, который поможет студенту найти совет.

Используя следующее,Я могу просто изменить алгоритм поиска в любое время в соответствии со своими потребностями.Я могу либо создать совершенно новый поиск, либо изменить тот, который у меня уже есть.Кроме того, я мог бы создать поиск по базе данных вместо списка рекомендаций.Я могу добавить новые критерии, обновив свою модель StudentAdvice и выполнив поиск этого совета в провайдере (это два отдельных изменений, поэтому они не нарушают принцип Open / Closed).1009 * По сути, это можно использовать в качестве шаблона стратегии.Однако я начал с домена, и сам шаблон возник.Выбор шаблонов сначала кодирует вас в углы.

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

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

0 голосов
/ 08 ноября 2011

Мне кажется, что шаблонный шаблон будет лучшим выбором.У вас есть алгоритм, в котором один шаг (выход) может варьироваться.Поэтому я сделаю что-то вроде этого (PHP):

abstract class MyAlgo
{
    function executeAlgo()   
    {
        $this->step1();
        $this->step2();
        $this->output();
    }

    function step1()
    {
       ...
    }

    function step2()
    {
        ...
    }

    abstract function output();
}

class Variation1 extends MyAlgo
{
    function output()
    {
        ...
    }
}

class Variation2 extends MyAlgo
{
    function output()
    {
        ...
    }
}
...