I have two classes now: EventsReader and EventsWriter. They actually work with one class and share some common functionality. I want to combine them into one class but can’t choose a good name for this class. The only idea I have is EventsProvider but isn’t Provider more about reading than writing?
What name would you use for class which combines operations of Reading and Writing?
First, as to the name, I would lean towards EventsIO or something along those lines. Or, as Adriano suggested, you could concatenate the two together and make it ReaderWriter. However, this is not as important to me as what you are describing that you want to do…
My Real Advice
I would suggest really looking at what the common functionality is. Without seeing your code I cannot say this with 100% certainty, but it seems like you should be using Composition over Inheritance, or in your case composition over combination. You could keep your EventsReader and EventsWriter as separate classes that consume a class that deals with the common functionality.
Take a look at the SOLID principles. Especially, the Single Responsibility Principle. If you combine the classes, then reading changes, but writing does not, then you have to make a code change for a class that deals with both, when you only want to change the functionality of one piece. Basically, you will have more than one reason for change.
Ultimately, you need to make your code work well, but I am suggesting that you really take a look at what combining might do for future maintainability versus having the two classes that consume a new class that encapsulates the common functionality. Only you will know your code base well enough to make that decision. As @csturtz commented, having trouble naming objects is a smell that you are indeed violating the SRP.