2015-04-09 6 views
2

Должен ли я использовать статический в следующих 2-х случаях:Должен ли я использовать статический метод (C#)

Случай 1)

public class RequestHeader 
{ 
    private string Username { get; set; } 
    private string Password { get; set; } 
    private string AccessKey { get; set; } 

    public string url { get; set; } 
    public string pageid { get; set; } 
    public string organizationid { get; set; } 

    private RequestHeader() 
    { 
    } 

    public static RequestHeader GetRequestHeader(string url, string pageid, string organizationid) 
    { 
     return new RequestHeader() 
     { 
      Username = "Some logic to fetch username", 
      Password = "Some logic to fetch password", 
      AccessKey = "Some access key", 
      url = url, 
      pageid = pageid, 
      organizationid = organizationid, 
     }; 
    } 
} 

Случай 2)

public class HttpClientHelper 
{ 
    public static HttpClient GetHttpClient(RequestHeader header) 
    { 
     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     foreach (var property in header.GetType().GetProperties()) 
     { 
      client.DefaultRequestHeaders.Add(property.Name, property.GetValue(header).ToString()); 
     } 

     return client; 
    } 
} 

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

Единственное, что заставляет меня хотеть использовать static здесь, это не инициализировать этот класс (я знаю, что это очень опасная причина).

Пожалуйста, дайте мне знать ваши мысли. Есть что-то, чего я не вижу в этом.

Примечание: 1) Я знаю небольшой корпус для некоторых свойств. Он синхронизируется с сервисом отдыха, на котором я абсолютно не контролирую. 2) Если в будущем у меня будет несколько RequestHeader, я могу создать IRequestHeader, у которого есть метод GetRequestHeader. Таким образом, различные RequestHeaders будут реализовывать это. В этом случае я знаю, что не могу хранить статический метод в интерфейсе. Пожалуйста, держите эти 2 условия и сообщите мне свои мысли.

+0

Это может быть лучше на http://codereview.stackexchange.com. Это не очень подходит для переполнения стека, поскольку это не проблема программного обеспечения или IDE. –

+0

В любом случае я могу поместить это в stackexchange. Или мне нужно создать там новый пост. – sam113

+1

Держитесь, прежде чем перемещать его в любом месте. Я не думаю, что это действительно * вне темы * для переполнения стека, поэтому я не вижу причин для его перемещения. –

ответ

7

У вас здесь есть версия Static Factory Pattern. Это хорошо известный образец и отлично подходит для использования.

Вас также может заинтересовать нестатическая версия Factory Pattern.

Я предполагаю, что HttpClient не «ваш класс», и в этом случае вы, конечно, не можете добавить метод внутри самого класса.

Единственное, что заставляет меня хотеть использовать static здесь, это не инициализировать этот класс. (Я знаю, что это очень опасная причина).

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

+0

Вы правы. HttpClient - из System.Net.Http. Мне кажется, что фабричная модель будет здесь прекрасна. :) – sam113

0

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

Смежные вопросы