开发者

Have I good sense of static method

I have class Country which has collections of Cities.

At client I use webmethod

[WebMethod]
pub开发者_Go百科lic void AddCity(string countryCode,string name)
{
MyFacade.AddCity(countryCode,name);
}

at Facade I have method

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

and the core of my question:

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

It's ok? Or I must create objectCountry, and there have non static method AddCity?

And another question:

Better use:

City[] cities=  Country.GetAllCities(countryCode)

or

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


Accepting both countryCode and cityName as parameters is fine for the data access layer, but I don't see any methods that should be static.

Rather AddCity should be a non-static member of DataConnection or some such, so that you can easily mock it, replace the database, etc. without changing the call interface.


Do you want to be able to unit test your code using a mocking framework?

Building on Ben's answer, replace the Facade with an interface:

[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;}
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜