A project I am working on currently models Order information. Right now, there is one class with a bunch of properties and functions that all of orders have in common. In addition, some of our users have customized properties and/or functions on top of the base order. Some of those customized properties are shared between multiple users and some are unique to a given user. The class has nearly 50 different properties, but a given user might only be using 20 or so of those properties.
I'd like to redesign it so that the base properties/functions are separate from the customized properties/functions, but I don't know how to approach this. I thought about inheriting the base class, but a user might have 3 or 4 different customized properties. There is no clear inheritance among the customized properties. I looked into the decorator pattern, but the interface is changing, so that doesn't seem to fit.
Is there any way to accomplish this without having the monolithic class?
Base Properties - OrderID, OrderDate, AccountId, etc. Customized Properties - BackOrdered, PONumber, ContactPerson Base Functions - PlaceOrder, CancelOrder Customized Functions - AddContact, DiscountPriceByPercent
So, some users might only have the base, one user might have the base + BackOrdered, and another user might have base + BackOrdered + PONumber.
This problem isn't unique to orders, I have the same problem with other objects in the project. I'm looking more for an architecture/pattern to solve the general case than for a way to handle orders.