2013-10-14 2 views
0

Я обнаружил, что мои методы кодирования в последнее время ускользают - и заметили, что я впадаю в какие-то вредные привычки - обычно из-за отсутствия мотивации с моей стороны (возможно, вызванной, но явной сущности заданий, заданных для меня). я поднял вверх позади, я решил написать сам, который должен быть очень простым, базовым классом. Вот он:Является ли это правильной реализацией и инициализацией класса?

public class Customer 
{  
    public string CUSTOMERNAME; 
    public List<Site> sites = new List<Site>(); 

    public Customer() 
    { 

    } 

    public void AddSite(Site location) 
    { 
     sites.Add(location); 
    } 

} 

public class Site 
{ 
     public string SITENAME; 
     public Address SITEADDRESSDETAILS; 
     public string SITEPHONENUMBER; 

     public Site(string sitename, Address siteaddress, string tel) 
     { 
      SITENAME = sitename; 
      SITEADDRESSDETAILS = siteaddress; 
      SITEPHONENUMBER = tel; 
     } 

} 

public class Address 
{ 
    public List<string> address = new List<string>(); 

    public Address() { 

    } 

    public void AddAddressDetail(string line) 
    { 
     address.Add(line); 
    } 

} 

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

static void Main(string[] args) 
{ 
    Customer customer = new Customer(); 
    customer.CUSTOMERNAME = "Max Hammer Ltd"; 

    Address addy = new Address(); 
    addy.AddAddressDetail("1 Edgerail Close"); 
    addy.AddAddressDetail("Greenbushes"); 
    addy.AddAddressDetail("Bluehill"); 
    addy.AddAddressDetail("Surrey"); 
    addy.AddAddressDetail("RH0 6LD"); 

    Site surreyOffice = new Site("Surrey Office", addy, "01737 000000"); 

    addy = new Address(); 
    addy.AddAddressDetail("6 Electric Avenue"); 
    addy.AddAddressDetail("Brixton"); 
    addy.AddAddressDetail("London"); 
    addy.AddAddressDetail("SW4 1BX"); 

    Site brixtonOffice = new Site("Brixton Office", addy, "020 7101 3333"); 

    customer.AddSite(surreyOffice); 
    customer.AddSite(brixtonOffice); 

    Console.WriteLine(customer.CUSTOMERNAME); 
    int numberOfSutes = customer.sites.Count; 
    for (int i = 0; i < numberOfSutes; i++) 
    { 
     Console.WriteLine(customer.sites[i].SITENAME); 
     foreach (string line in customer.sites[i].SITEADDRESSDETAILS.address) 
     { 
      Console.WriteLine(line); 
     } 
     Console.WriteLine(customer.sites[i].SITEPHONENUMBER); 
    } 
    Console.ReadKey(); 

} 

Я не доволен своим Main класса, и я не знаю, почему - даже если он делает то, что я хочу. Любые советы, указатели?

+7

для начала я бы предложил не использовать все прописные имена переменных – thumbmunkeys

+0

'общественная строка CUSTOMERNAME,' вы должны там остановились. – Will

+0

Для начала, пожалуйста, используйте некоторые распространенные методы программирования, такие как небольшой футляр для частных полей. Вы можете прочитать о них здесь http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx –

ответ

1

Вот как я это вижу:

  • Используйте свойства с соответствующей капитализацией.
  • Почему список строк в адресе ?! [Удалено].
  • Прямой доступ к спискам.

public class Customer 
{ 
    public string Name {get; set;} 
    public List<Site> Sites { get; set; } 

    public Customer() 
    { 
     Sites = new List<Site>(); 
    } 
} 

public class Site 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string PhoneNumber { get; set; } 

    public Site(string sitename, string siteaddress, string tel) 
    { 
     Name = sitename; 
     Adress = siteaddress; 
     PhoneNumber = tel; 
    } 

} 

public class Program 
{ 
    static void Main(string[] args) 
    { 

     Customer customer = new Customer(); 
     customer.Name = "Max Hammer Ltd"; 

     string address = string.Join(Environment.NewLine, new []{"1 Edgerail Close", "Greenbushes", "Bluehill" 
      , "Surrey", "RH0 6LD"}); 

     Site surreyOffice = new Site("Surrey Office", address, "01737 000000"); 

     address = string.Join(Environment.NewLine, new[]{"1 Edgerail Close", "Greenbushes", "Bluehill" 
       , "Surrey", "RH0 6LD"}); 

     Site brixtonOffice = new Site("Brixton Office", address, "020 7101 3333"); 

     customer.Sites.Add(surreyOffice); 
     customer.Sites.Add(brixtonOffice); 

     Console.WriteLine(customer.Name); 
     foreach (Site site in customer.Sites) 
     { 
      Console.WriteLine(site.Name); 
      Console.WriteLine(site.Adress); 
      Console.WriteLine(site.PhoneNumber); 
      Console.WriteLine(); 
     } 
     Console.ReadKey(); 

    } 
} 
+0

Что делать, если в адресной строке есть запятая? Я всегда использую структуры данных списка для хранения списков, а не для разбора какой-либо разделительной строки взад и вперед. –

+0

Спасибо, Ахмед, ваш пример подчеркивает мне, где именно я допустил плохие практики, - и поставил меня прямо. Опять же, большое спасибо. – tripbrock

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