Не подразумевает ли статика никакого состояния - PullRequest
7 голосов
/ 27 октября 2009

Недавно я дал рекомендацию одному из моих коллег, заявив, что в нашем текущем проекте (C #) «службы должны быть без состояний и, следовательно, статичными».

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

Мои вопросы: «подразумевает ли метод, помеченный как статический, что он не требует состояния и что в большинстве случаев методы без состояния должны быть статическими».

Ответы [ 13 ]

1 голос
/ 27 октября 2009

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

0 голосов
/ 27 октября 2009

Если вы хотите один экземпляр с состоянием, используйте шаблон синглтона; это дает понять, что вы работаете с единичным объектом.

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

0 голосов
/ 27 октября 2009

Это в целом правильно. Однако вы можете иметь статические переменные, которые позволяют вашим статическим методам иметь состояние. Например, возьмем этот класс FooBarFactory:

class FooBarFactory
{
    private static _id = 0;
    public FooBar MakeAFooBar()
    {
        FooBar foo = new FooBar();
        foo.ID = _id;
        _id++;
    }
}
class FooBar
{
    public int ID {get;set;}
}

В этом случае ваш статический метод имеет минимум состояния, но он (вероятно) необходим.

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