2010-10-14 8 views
0

J'ai classe Pays qui a des collections de villes.Ai-je le bon sens de la méthode statique

Au client j'utiliser webmethod

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

à Façade Je méthode

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

et le noyau de ma question:

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

Il est ok? Ou je dois créer objectCountry, et il y a une méthode non statique AddCity?

Et une autre question:

Meilleure utilisation:

City[] cities= Country.GetAllCities(countryCode) 

ou

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

Répondre

1

ACCEPTEZ à la fois countryCode et cityName comme paramètres est très bien pour la couche d'accès aux données, mais je ne voir toutes les méthodes qui devraient être statiques.

Plutôt AddCity devrait être un membre non-statique de DataConnection ou une telle, de sorte que vous pouvez facilement le railler, remplacer la base de données, etc. sans changer l'interface d'appel.

+0

Je pense que les deux '' MyFacade.AddCity' et Country.AddCity' sont statiques. –

+0

oui, Facade est une classe statique et MyFacade.both MyFacade.AddCity et Country.AddCity sont statiques. – user278618

+1

Et c'est ce que je ne suis pas d'accord avec. Ce n'est pas le type 'Country' qui doit être dynamique et polymorphe, c'est la connexion à la base de données. –

1

Voulez-vous être en mesure de tester votre code en utilisant un cadre de simulation?

Miser sur la réponse de Ben, remplacer la façade avec une 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;} 
} 
Questions connexes