Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Design and Architecture
  4. Could there be a base class for customers, employees and suppliers?

Could there be a base class for customers, employees and suppliers?

Scheduled Pinned Locked Moved Design and Architecture
helpquestion
28 Posts 8 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Nagy Vilmos

    No. I mean as candidate classes. Begin by writing out in plain English [other languages are available] what you want to do. As an example, your system could be described thus:

    Requirements:

    Provide software to manage the relationships between the company and it's suppliers and customers. All the contacts can be either individual people or companies. Any company will have one or more contact. Orders are recieved from customers and placed with suppliers for the provision of Widgets and associated products. Every order received will result in an invoice being raised by the accounting system. Orders placed with suppliers will be filled and invoices for payment will be sent to the accounting system. Each order [inbound or outbound] will have a billing address and a delivery address, these need not be the same. Each customer can have default addresses associated with it.

    From this initial requirement, you can take out all the nouns and noun phrases. These are your candidate classes. The next stage is to decide which ones are classes in their own right and which are attributes. Often a lot of candidates can be reduced. As an exercise, I would recommend giving this a go and see where it takes you.


    Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

    N Offline
    N Offline
    nstk
    wrote on last edited by
    #19

    Thanks for your effort, I really appreciate this great help. I will indeed develop this as an exercise and if there is something to discuss I will write it here. :)

    N 1 Reply Last reply
    0
    • N Nagy Vilmos

      I'd argue the other way around. Company is not an attribute of a person, but a person - as in a contact - is an attribute of a company.


      Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

      R Offline
      R Offline
      RobCroll
      wrote on last edited by
      #20

      And all the customers who are buying products and services for their own personal use. They don't have companies so what do you do about them?

      "You get that on the big jobs."

      N 1 Reply Last reply
      0
      • N nstk

        In a software for a company, we usually have customers, employees and suppliers in what regards humans. Therefore a reasonable (meaning a good one) OOP approach would be to have a class 'Persons' with attributes such as name, surname, address etc. and then let the classes 'Customers', 'Employees' and 'Suppliers' derive from the class 'Persons'. But, on a second thought there is a problem. How do we deal with customers and suppliers which are companies?

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #21

        I would suggest looking at good MDM[^] designs as they obviously deal with it. I am not saying make yourself an MDM system (or buy/donwload one). I am just saying that MDM deals with so many 'entities' and they of course try to abstract out the overlapping info. I have never really looked into it too much but have dealt with MDM groups. Sometimes their 'naming' is off so it can be confusing, but in the end they get the job done. So if you find some info on MDM architecture you might stumble on to a good base class design.

        Computers have been intelligent for a long time now. It just so happens that the program writers are about as effective as a room full of monkeys trying to crank out a copy of Hamlet.

        1 Reply Last reply
        0
        • R RobCroll

          And all the customers who are buying products and services for their own personal use. They don't have companies so what do you do about them?

          "You get that on the big jobs."

          N Offline
          N Offline
          Nagy Vilmos
          wrote on last edited by
          #22

          You missed the BIG POINT earlier. A customer is a person or a company, A company also has a person as a contact. I almost feel an article...


          Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

          N R 2 Replies Last reply
          0
          • N Nagy Vilmos

            You missed the BIG POINT earlier. A customer is a person or a company, A company also has a person as a contact. I almost feel an article...


            Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

            N Offline
            N Offline
            nstk
            wrote on last edited by
            #23

            Nagy Vilmos wrote:

            A customer is a person or a company, A company also has a person as a contact.

            What about putting the Persons class as a nested class in the Company class in that case? Complicated?

            N 1 Reply Last reply
            0
            • N nstk

              Nagy Vilmos wrote:

              A customer is a person or a company, A company also has a person as a contact.

              What about putting the Persons class as a nested class in the Company class in that case? Complicated?

              N Offline
              N Offline
              Nagy Vilmos
              wrote on last edited by
              #24

              Not a good idea. The attributes of a person - name, date of birth, sex, etc - are independent of the role they perform. A decent representation of a person will be reusable if you ignore how it is used. Similarly, the concept of a company is independent of the problem domain. A company has employees but, and this is true in real life as much as in a program, the employee does not have a company.


              Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

              1 Reply Last reply
              0
              • N nstk

                Thanks for your effort, I really appreciate this great help. I will indeed develop this as an exercise and if there is something to discuss I will write it here. :)

                N Offline
                N Offline
                Nagy Vilmos
                wrote on last edited by
                #25

                Here is a simple set of candidate classes:

                              +------------+
                              |  Customer  |
                              |            |
                              +------------+
                                    |
                                    v
                

                +------------+ +------------+ +------------+
                | Supplier |--->| Contact |--->| Person |
                | | | | | |
                +------------+ +------------+ +------------+
                |
                +------+--------+
                | impliments |
                +------------+ +------------+
                | Company | | Individual |
                | | | |
                +------------+ +------------+


                Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

                N 1 Reply Last reply
                0
                • N Nagy Vilmos

                  Here is a simple set of candidate classes:

                                +------------+
                                |  Customer  |
                                |            |
                                +------------+
                                      |
                                      v
                  

                  +------------+ +------------+ +------------+
                  | Supplier |--->| Contact |--->| Person |
                  | | | | | |
                  +------------+ +------------+ +------------+
                  |
                  +------+--------+
                  | impliments |
                  +------------+ +------------+
                  | Company | | Individual |
                  | | | |
                  +------------+ +------------+


                  Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

                  N Offline
                  N Offline
                  nstk
                  wrote on last edited by
                  #26

                  Shouldn't Person inherit from Contact? The arrow direction between them indicates the opposite situation.

                  N 1 Reply Last reply
                  0
                  • N nstk

                    Shouldn't Person inherit from Contact? The arrow direction between them indicates the opposite situation.

                    N Offline
                    N Offline
                    Nagy Vilmos
                    wrote on last edited by
                    #27

                    The arrows represents a reference, so a Contact 'has a' Person.


                    Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

                    1 Reply Last reply
                    0
                    • N Nagy Vilmos

                      You missed the BIG POINT earlier. A customer is a person or a company, A company also has a person as a contact. I almost feel an article...


                      Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

                      R Offline
                      R Offline
                      RobCroll
                      wrote on last edited by
                      #28

                      I still missed the big point but if you do get around to writing the article, It would be interesting. I guess your talking about some kind of interface that both person and customer implement. Anyway I've just spent the last month discovering values such as the "delivery contact name" being stored in the weather_sunny field. :mad: So I'm a bit paranoid about such things at the moment.

                      "You get that on the big jobs."

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups