У меня хорошее чувство статического метода - PullRequest
0 голосов
/ 14 октября 2010

У меня есть класс Country, в котором есть коллекции Cities.

У клиента я использую webmethod

[WebMethod]
public void AddCity(string countryCode,string name)
{
MyFacade.AddCity(countryCode,name);
}

, на Фасаде у меня есть метод

public void AddCity(string countryCode,string name)
{
Country.AddCity(countryCode,name); <-in this method is simple sql operation
}

и ядро.моего вопроса:

public class Country
{
public static void AddCity(string countryCode, string cityName)
{
//insert into table cities new city
}
}

Это нормально?Или я должен создать objectCountry, и там есть нестатический метод AddCity?

И еще вопрос:

Лучше использовать:

City[] cities=  Country.GetAllCities(countryCode)

или

City[] cities=  new Country(countryCode).GetAllCities()

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Хотите ли вы иметь возможность модульного тестирования вашего кода с использованием фреймворка?

Опираясь на ответ Бена, замените Фасад интерфейсом:

[WebMethod]
public void AddCity(string countryCode, string name)
{
    ICountryDataAccess dao = GetDAOFromDI(); // basically get a DI framework to manage this object instance.
    dao.AddCity(countryCode, name);
}

public interface ICountryDataAccess 
{
    void AddCity(string countryCode, string name);
    ICollection<City> GetAllCities(string countryCode);
    // OR !
    Country Retrieve(string countryCode);
    // using an ORM or something Country then as a list of cities
}

public Country 
{
    public virtual string CountryCode {get;set;} 
    public virtual ICollection<City> Cities {get; protected set;}
}
1 голос
/ 14 октября 2010

Принятие обоих параметров countryCode и cityName в качестве параметров подходит для уровня доступа к данным, но я не вижу методов, которые должны быть статическими.

Скорее, AddCity должно быть нестатический член DataConnection или что-то подобное, так что вы можете легко смоделировать его, заменить базу данных и т. д. без изменения интерфейса вызова.

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