Of course there are many, many, many, many, many, many, many, resources about this topic.
But I think you are on the right path dividing up the objects and let them handle its own events/data and so on.
When doing tiled based board games you'll find it nice to have routines to map between the board array and row/col and back, along other features. I remember my first board game (long long ago) when I struggeled with how to get row/col from boardarray 5.
1 2 3
4 (5) 6 BoardArray 5 = row 2, col 2
7 8 9
Nostalgy. ;)
Anyway, http://www.gamedev.net/ is a good place for information.
http://www.gamedev.net/reference/