I have a 2 1/2 yr old boy- what I have been doing to keep his behavior on track is to focus on only one or two behaviors at a time, say for a week or two, until he gets the hang of that one behavior. Then I move on to another one I want to change. For example, this week we are working on saying "I would like a drink (or whatever), please." in a nice normal voice, instead of whining or shouting "I WANT JUICE!!!!"
I just correct the behavior- when he whines I say "That sounds like whining. Try it like this:" and then I demonstrate how she should ask nicely. He doesn't get what he wants until he can repeat at least part of it back in a nice voice. Then I praise him when he gets it right by saying " Good job! I really like how you asked for that."
It also helps if you can at all possibly respond immediately when he makes a request (at least at first) since it is mostly when I am ignoring him that the bad behavior comes out as attention-getting. Just now my very over-tired son asked very nicely from the other room "I would like some juice please." I immediately stopped typing and looked at him and said, "I really liked how you asked for that: I would like some juice please." and I got him some sugar-free koolaid. If I had not responded right away, we easily could have had a meltdown.
I've done this same thing for a number of behaviors (food-throwing, hitting the dog, biting, you name it.) I always use the same formula:
Focus on ONE or two bad behaviors.
Gently correct by stating what they did ("You hit the dog.") then telling and showing them what to do instead ("We don't do that. We pet him gently like this.")
You can guide his hand if he'll let you. Then praise him for doing it right the same way. State what he did "Good job, you pet the dog gently. He really likes to be pet that way."
The important thing here is that you are teaching without having to discipline. Now if he keeps repeating the bad behavior, say he has hit the dog 3 times in a row despite you correcting him as described above, then it is time to say, "I know you can pet the dog nicely. If you hit her again, you will have to have a time-out" (or whatever discipline you decide on. Follow through, either with praise or the discipline you said depending on what they do. Make the discipline be something immediate, not something like no party on Friday.
One other thing I have done recently that has majorly improved the behavior of my son is to declare the month of September movie-free. He had been getting to watch some very good age-appropriate videos, but he had been allowed to watch them on-demand, multiple times a day, every day. The whining got to be unbearable. Since I banned all movies and tv, the turnaround has been amazing. He asked A LOT the first 3 days, and I'd just say "We aren't having any movies this month. We can read a book instead." I got a few used books with the same characters as his movies and we have been reading them quite a bit.
You said you feel like you fight all day long. I felt like that until I started focusing on just one behavior at a time. I had to let a lot of things go at first, but we are getting to most of them as we go. Try to keep calm, they feed off your anger and frustration.
One more note- he's probably ready top be done with naps altogether.
Best luck- let me know if you try it and how/if it works for you.
{{{{HUGS}}}}
Jen