Object Oriented Design: Where to place behavior that pertains to more than one type of object?Implications of handles between formsHow is encapsulation used for safety?Object Oriented DesignIs my class structure good enough?Determining a class structureObject Oriented Analysis and Design and DDD togetherHow to manage single responsibility when the responsibility is shared?In a .NET Windows Forms app with a custom MVC, should a custom UserControl (view) implement any non-animating logic on its own?Recreating complex aggregates from a persistance source

Does python reuse repeated calculation results?

Fair Use of Photos as a Derivative Work

An example of a "regular poset" which does not belong to a convex polytope

Proof of bound on optimal TSP tour length in rectangular region

Can/should you swim in zero G?

Choice of solvent during thin layer chromatography

What benefits are there to blocking most search engines?

Injection from two strings to one string

Can someone identify this old round connector?

Search for something difficult to count/estimate

As an interviewer, how to conduct interviews with candidates you already know will be rejected?

Has Boris Johnson ever referred to any of his opponents as "traitors"?

In 1700s, why was 'books that never read' grammatical?

What is /dev/null and why can't I use hx on it?

Mac no longer boots

When can this condition on linear codes be satisfied?

Vim freezes after Ctrl-S

Are there any tricks to pushing a grand piano?

Does every Ubuntu question answer apply to it's derivatives? (Xubuntu, Lubuntu, Kubuntu)

Conveying the idea of "down the road" (i.e. in the future)

What's the difference between motherboard and chassis?

Determine the Winner of a Game of Australian Football

How do I know how many sub-shells deep I am?

Does the DOJ's declining to investigate the Trump-Zelensky call ruin the basis for impeachment?



Object Oriented Design: Where to place behavior that pertains to more than one type of object?


Implications of handles between formsHow is encapsulation used for safety?Object Oriented DesignIs my class structure good enough?Determining a class structureObject Oriented Analysis and Design and DDD togetherHow to manage single responsibility when the responsibility is shared?In a .NET Windows Forms app with a custom MVC, should a custom UserControl (view) implement any non-animating logic on its own?Recreating complex aggregates from a persistance source






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;









1















I have been trying to learn Object Oriented Design, but I find it very difficult to decide where to put behavior that deals with more than one type of object.



For example, I am building a REST API, it has User and Event entities.

Users can register for events.

Where to put registerUserForEvent(String userid, String eventid) and getRegisteredEventsForUser(String userid)?



registerUserForEvent():

If I put it in User class, it will have to know about how to check an event with given String eventId exists in the DB.
Vice versa if I put it in Event class.



getRegisteredEventsForUser():
This one is even harder, as this requires a JOIN in SQL (or an aggregate pipeline in MongoDB), which will need to know the internals of both User and Event classes. This leads to breaking encapsulation right?



So, what is the best way to model this in OO?










share|improve this question







New contributor



happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



























    1















    I have been trying to learn Object Oriented Design, but I find it very difficult to decide where to put behavior that deals with more than one type of object.



    For example, I am building a REST API, it has User and Event entities.

    Users can register for events.

    Where to put registerUserForEvent(String userid, String eventid) and getRegisteredEventsForUser(String userid)?



    registerUserForEvent():

    If I put it in User class, it will have to know about how to check an event with given String eventId exists in the DB.
    Vice versa if I put it in Event class.



    getRegisteredEventsForUser():
    This one is even harder, as this requires a JOIN in SQL (or an aggregate pipeline in MongoDB), which will need to know the internals of both User and Event classes. This leads to breaking encapsulation right?



    So, what is the best way to model this in OO?










    share|improve this question







    New contributor



    happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      1












      1








      1








      I have been trying to learn Object Oriented Design, but I find it very difficult to decide where to put behavior that deals with more than one type of object.



      For example, I am building a REST API, it has User and Event entities.

      Users can register for events.

      Where to put registerUserForEvent(String userid, String eventid) and getRegisteredEventsForUser(String userid)?



      registerUserForEvent():

      If I put it in User class, it will have to know about how to check an event with given String eventId exists in the DB.
      Vice versa if I put it in Event class.



      getRegisteredEventsForUser():
      This one is even harder, as this requires a JOIN in SQL (or an aggregate pipeline in MongoDB), which will need to know the internals of both User and Event classes. This leads to breaking encapsulation right?



      So, what is the best way to model this in OO?










      share|improve this question







      New contributor



      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I have been trying to learn Object Oriented Design, but I find it very difficult to decide where to put behavior that deals with more than one type of object.



      For example, I am building a REST API, it has User and Event entities.

      Users can register for events.

      Where to put registerUserForEvent(String userid, String eventid) and getRegisteredEventsForUser(String userid)?



      registerUserForEvent():

      If I put it in User class, it will have to know about how to check an event with given String eventId exists in the DB.
      Vice versa if I put it in Event class.



      getRegisteredEventsForUser():
      This one is even harder, as this requires a JOIN in SQL (or an aggregate pipeline in MongoDB), which will need to know the internals of both User and Event classes. This leads to breaking encapsulation right?



      So, what is the best way to model this in OO?







      object-oriented object-oriented-design






      share|improve this question







      New contributor



      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share|improve this question







      New contributor



      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share|improve this question




      share|improve this question






      New contributor



      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      asked 9 hours ago









      happycoder97happycoder97

      213 bronze badges




      213 bronze badges




      New contributor



      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




      New contributor




      happycoder97 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.

























          1 Answer
          1






          active

          oldest

          votes


















          7
















          Very often, when you have a behavior where you cannot decide which of two objects should have it, that is because either



          • the two objects should actually be one object or

          • there is a third object missing.

          A great example is the classic "Bank account" that is so often used as an introduction to OO. In the typical example, balance is data and deposit is an operation. This leads to all sorts of problems, but the one we are focusing on here is: where do you put the transfer method? If a transfers money to b, should it be a.transfer(b, amount) or b.transfer(a, amount)? Why would a even know about b? Why would b even know about a? Why would either of the two even know how to transfer money?



          However, that is actually not how banking works in real-life and is also not how banking systems are typically designed.



          In the real-world, deposit is actually data (it is a transaction slip) and balance is an operation (summing up all transaction slips for one account). This is the way banking was done for hundreds of years, and it is actually also how banking systems are written.



          This has some advantages for concurrency (now, both Accounts and TransactionSlips are immutable, and balance is a pure function). But, it also solves our conundrum above: neither a nor b know how to transfer money, the bank knows that. transfer is now actually new TransactionSlip(a, b, amount).



          Back to your specific example: it looks like what you are missing is at least one object, possibly even two:




          • Registration: Encapsulates the fact of a user being registered for an event


          • Registry: contains all Registrations





          share|improve this answer

























          • This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

            – happycoder97
            5 hours ago






          • 1





            The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

            – Vector Zita
            4 hours ago











          • @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

            – happycoder97
            4 hours ago







          • 1





            Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

            – Vector Zita
            3 hours ago







          • 1





            By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

            – Vector Zita
            1 hour ago












          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "131"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );







          happycoder97 is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded
















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsoftwareengineering.stackexchange.com%2fquestions%2f399053%2fobject-oriented-design-where-to-place-behavior-that-pertains-to-more-than-one-t%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          7
















          Very often, when you have a behavior where you cannot decide which of two objects should have it, that is because either



          • the two objects should actually be one object or

          • there is a third object missing.

          A great example is the classic "Bank account" that is so often used as an introduction to OO. In the typical example, balance is data and deposit is an operation. This leads to all sorts of problems, but the one we are focusing on here is: where do you put the transfer method? If a transfers money to b, should it be a.transfer(b, amount) or b.transfer(a, amount)? Why would a even know about b? Why would b even know about a? Why would either of the two even know how to transfer money?



          However, that is actually not how banking works in real-life and is also not how banking systems are typically designed.



          In the real-world, deposit is actually data (it is a transaction slip) and balance is an operation (summing up all transaction slips for one account). This is the way banking was done for hundreds of years, and it is actually also how banking systems are written.



          This has some advantages for concurrency (now, both Accounts and TransactionSlips are immutable, and balance is a pure function). But, it also solves our conundrum above: neither a nor b know how to transfer money, the bank knows that. transfer is now actually new TransactionSlip(a, b, amount).



          Back to your specific example: it looks like what you are missing is at least one object, possibly even two:




          • Registration: Encapsulates the fact of a user being registered for an event


          • Registry: contains all Registrations





          share|improve this answer

























          • This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

            – happycoder97
            5 hours ago






          • 1





            The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

            – Vector Zita
            4 hours ago











          • @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

            – happycoder97
            4 hours ago







          • 1





            Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

            – Vector Zita
            3 hours ago







          • 1





            By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

            – Vector Zita
            1 hour ago















          7
















          Very often, when you have a behavior where you cannot decide which of two objects should have it, that is because either



          • the two objects should actually be one object or

          • there is a third object missing.

          A great example is the classic "Bank account" that is so often used as an introduction to OO. In the typical example, balance is data and deposit is an operation. This leads to all sorts of problems, but the one we are focusing on here is: where do you put the transfer method? If a transfers money to b, should it be a.transfer(b, amount) or b.transfer(a, amount)? Why would a even know about b? Why would b even know about a? Why would either of the two even know how to transfer money?



          However, that is actually not how banking works in real-life and is also not how banking systems are typically designed.



          In the real-world, deposit is actually data (it is a transaction slip) and balance is an operation (summing up all transaction slips for one account). This is the way banking was done for hundreds of years, and it is actually also how banking systems are written.



          This has some advantages for concurrency (now, both Accounts and TransactionSlips are immutable, and balance is a pure function). But, it also solves our conundrum above: neither a nor b know how to transfer money, the bank knows that. transfer is now actually new TransactionSlip(a, b, amount).



          Back to your specific example: it looks like what you are missing is at least one object, possibly even two:




          • Registration: Encapsulates the fact of a user being registered for an event


          • Registry: contains all Registrations





          share|improve this answer

























          • This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

            – happycoder97
            5 hours ago






          • 1





            The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

            – Vector Zita
            4 hours ago











          • @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

            – happycoder97
            4 hours ago







          • 1





            Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

            – Vector Zita
            3 hours ago







          • 1





            By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

            – Vector Zita
            1 hour ago













          7














          7










          7









          Very often, when you have a behavior where you cannot decide which of two objects should have it, that is because either



          • the two objects should actually be one object or

          • there is a third object missing.

          A great example is the classic "Bank account" that is so often used as an introduction to OO. In the typical example, balance is data and deposit is an operation. This leads to all sorts of problems, but the one we are focusing on here is: where do you put the transfer method? If a transfers money to b, should it be a.transfer(b, amount) or b.transfer(a, amount)? Why would a even know about b? Why would b even know about a? Why would either of the two even know how to transfer money?



          However, that is actually not how banking works in real-life and is also not how banking systems are typically designed.



          In the real-world, deposit is actually data (it is a transaction slip) and balance is an operation (summing up all transaction slips for one account). This is the way banking was done for hundreds of years, and it is actually also how banking systems are written.



          This has some advantages for concurrency (now, both Accounts and TransactionSlips are immutable, and balance is a pure function). But, it also solves our conundrum above: neither a nor b know how to transfer money, the bank knows that. transfer is now actually new TransactionSlip(a, b, amount).



          Back to your specific example: it looks like what you are missing is at least one object, possibly even two:




          • Registration: Encapsulates the fact of a user being registered for an event


          • Registry: contains all Registrations





          share|improve this answer













          Very often, when you have a behavior where you cannot decide which of two objects should have it, that is because either



          • the two objects should actually be one object or

          • there is a third object missing.

          A great example is the classic "Bank account" that is so often used as an introduction to OO. In the typical example, balance is data and deposit is an operation. This leads to all sorts of problems, but the one we are focusing on here is: where do you put the transfer method? If a transfers money to b, should it be a.transfer(b, amount) or b.transfer(a, amount)? Why would a even know about b? Why would b even know about a? Why would either of the two even know how to transfer money?



          However, that is actually not how banking works in real-life and is also not how banking systems are typically designed.



          In the real-world, deposit is actually data (it is a transaction slip) and balance is an operation (summing up all transaction slips for one account). This is the way banking was done for hundreds of years, and it is actually also how banking systems are written.



          This has some advantages for concurrency (now, both Accounts and TransactionSlips are immutable, and balance is a pure function). But, it also solves our conundrum above: neither a nor b know how to transfer money, the bank knows that. transfer is now actually new TransactionSlip(a, b, amount).



          Back to your specific example: it looks like what you are missing is at least one object, possibly even two:




          • Registration: Encapsulates the fact of a user being registered for an event


          • Registry: contains all Registrations






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 8 hours ago









          Jörg W MittagJörg W Mittag

          73.1k16 gold badges158 silver badges239 bronze badges




          73.1k16 gold badges158 silver badges239 bronze badges















          • This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

            – happycoder97
            5 hours ago






          • 1





            The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

            – Vector Zita
            4 hours ago











          • @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

            – happycoder97
            4 hours ago







          • 1





            Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

            – Vector Zita
            3 hours ago







          • 1





            By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

            – Vector Zita
            1 hour ago

















          • This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

            – happycoder97
            5 hours ago






          • 1





            The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

            – Vector Zita
            4 hours ago











          • @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

            – happycoder97
            4 hours ago







          • 1





            Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

            – Vector Zita
            3 hours ago







          • 1





            By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

            – Vector Zita
            1 hour ago
















          This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

          – happycoder97
          5 hours ago





          This is nice. But how to solve the problem of getRegisteredEventsForUser()? If I don't break encapsulation by doing a join, I will end up doing N+1 queries right?

          – happycoder97
          5 hours ago




          1




          1





          The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

          – Vector Zita
          4 hours ago





          The additional missing entity described here is not only a problem of your Object-Oriented Design, it is also a problem for your underlying database. The database should not only have a Users and an Events Table, it should also have a UserEventRegistrations Table acting as the associative entity, in order to be in first normal form. Then, querying this table should pose no problem. If you store EventIDs in the Users table and/or vice versa, then yes, you would probably need N+1 queries.

          – Vector Zita
          4 hours ago













          @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

          – happycoder97
          4 hours ago






          @VectorZita But even after creating a UserEventRegistrations table, it would still have to do joins or N+1 queries right?

          – happycoder97
          4 hours ago





          1




          1





          Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

          – Vector Zita
          3 hours ago






          Well, minimally, the table contains the fields (for example) [RegistrationID, UserID, EventID]. For each new registration, the table contains one record. Retrieving all events for a user or all users for an event are single-queries into that table, i.e. "select all [RegistrationID, EventID] from UserEventRegistrations, where UserID is John Doe".

          – Vector Zita
          3 hours ago





          1




          1





          By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

          – Vector Zita
          1 hour ago





          By "seats" you mean "how many users are left to register to the event" as in "each event has a limited number of potential listeners"? If so, there are various ways to deal with this type of concern. One of them, for example, is to actively track this number for each event, within your O-O design, i.e. maintain a map holding the number of users that are registered for each event. Upon every new event registration, the count will be increased for that event. This way, you don't need to calculate anything, your remaining_seats per event is always up-to-date, inside the map.

          – Vector Zita
          1 hour ago











          happycoder97 is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded

















          happycoder97 is a new contributor. Be nice, and check out our Code of Conduct.












          happycoder97 is a new contributor. Be nice, and check out our Code of Conduct.











          happycoder97 is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Software Engineering Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsoftwareengineering.stackexchange.com%2fquestions%2f399053%2fobject-oriented-design-where-to-place-behavior-that-pertains-to-more-than-one-t%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

          Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

          Ласкавець круглолистий Зміст Опис | Поширення | Галерея | Примітки | Посилання | Навігаційне меню58171138361-22960890446Bupleurum rotundifoliumEuro+Med PlantbasePlants of the World Online — Kew ScienceGermplasm Resources Information Network (GRIN)Ласкавецькн. VI : Літери Ком — Левиправивши або дописавши її