Какая структура данных для правил репутации в C # (например, переполнение стека) - PullRequest
1 голос
/ 21 апреля 2010

В настоящее время я строю систему, в которой будут существа с такими же показателями, как репутация и т. Д.

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

Ранее я использовал скажем Enum для этого, когда мне нужно было только сохранить идентификатор и описание.

public enum ShoppingCratCalculation
{
    PartialCalculation = 1,
    CompleteCalculation =2
}

Но в этой ситуации я хочу нести больше информации, такой как изменение репутации, все в одном месте.

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

1. Description = string ("User forgot to write a review")
2. DB id = int (23)
3. Rep score modification = int (-5)

Может быть, небольшой класс (Rule) с этими свойствами, а затем просто list<Rule>?

Есть ли у кого-нибудь лучшие рекомендации для такого рода структур?

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

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

Сказав это, вот несколько вещей, которые я бы рассмотрел. Если структура плоская и только одно правило может применяться в любой момент времени, или каждое правило является независимым, тогда может подойти словарь с ключом идентификатора правила (возможно, перечислением) Если может применяться более одного правила, и они взаимодействуют, то, возможно, вы захотите сохранить их в коллекции и создать составное правило, используя шаблон Decorator из всех соответствующих правил. Например, покупка с проверенной учетной записью и написание отзыва может дать вам больше репутации, чем написание отзыва с анонимной учетной записью. Если правила являются иерархическими, то есть есть какой-то приоритет, то цепочка фильтров с возможностью прервать цепочку может быть более подходящей.

1 голос
/ 21 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...