troubleshooting Question

Is having multiples properties chained togeather bad coding practice?

Avatar of obb-taurus
obb-taurusFlag for Canada asked on
C#ASP.NET
7 Comments1 Solution299 ViewsLast Modified:
I've been designing some classes for my ASP.NET application and a couple of the classes have fields which are of other class types.  When I was coding my save methods, I found that I was chaining quite a few properties togeather simply to get a value, for example in order to access the value for a street address I would have to type Customer.Contact.Address.StreetAddress and that seems rather convoluted so I'm wondering if this is normal or did I design my classes badly which are below.

Thanks

 public abstract class Person
    {
        private string firstName;
        private string lastName;

        public Person(string firstName, string lastName)
        {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public string FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }

        public string LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }
    }

The customer class is what is passed to the method that save to the the database.

public class Customer : Person
    {
        private string notes;
        private Contact contact;

        public Customer(string firstName, string lastName, Contact contact) :
            base (firstName, lastName)
        {
            this.contact = contact;
        }

        public Contact Contact
        {
            get { return contact; }
            set { contact = value; }
        }

        public string Notes
        {
            get { return notes; }
            set { notes = value; }
        }
    }

Contact class is used in Customer to store contact info

public class Contact
    {
        private Address address;
        private Company company;
        private List<ContactDetail> contactDetails;

        public Contact(Address address, Company company)
        {
            this.address = address;
            this.company = company;
            this.contactDetails = new List<ContactDetail>();
        }


        public Address Address
        {
            get { return address; }
            set { address = value; }
        }

        public Company Company
        {
            get { return company; }
            set { company = value; }
        }

        public List<ContactDetail> ContactDetails
        {
            get { return contactDetails; }
        }

        public void AddContactDetails(ContactDetail detail)
        {
            contactDetails.Add(detail);
        }

    }

Contact detail is a class that is decalred as a list in Contact to store multiple contact types

public class ContactDetail
    {
        private ContactType contactType;
        private string contactInfo;

        public ContactDetail(ContactType contactType, string contactInfo)
        {
            this.contactType = contactType;
            this.contactInfo = contactInfo;
        }

        public string ContactInfo
        {
            get { return contactInfo; }
            set { contactInfo = value; }
        }
        
        public ContactType ContactType
        {
            get { return contactType; }
            set { contactType = value; }
        }

    }

Address contains basic address info

 public class Address
    {
        public Address(string streetAddess, string cityName, string provinceName, string postalCode)
        {
            this.StreetAddress = streetAddess;
            this.CityName = cityName;
            this.ProvinceName = provinceName;
            this.PostalCode = postalCode;
        }

        public string StreetAddress { get; set; }
        public string CityName { get; set; }
        public string ProvinceName { get; set; }
        public string PostalCode { get; set; }
    }
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 7 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 7 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros