Billions of loop cuts
You don't have to make several objects, you can keep all of your geometry in a single mesh, but if the pieces are separate in the real world referece, then separate them in modeling.
You must have misunderstood some of the guidelines, this also won't increase your files size. It will likely decrease it because you can use simpler geometry. You can also Separate P and combine CtrlJ meshes at any time.

Good models will have good topology and edge flow. The edge flow should also be subdividable. Topology-Guides on tumblr has very good references on this topic.

If you really don't want to use separate pieces in your geometry (although you should), there is no problem with using triangles in planar areas. If you absolutely only want to use quads, here is some ugly topology.

Start with the base quad, inset it, add a supporting loop on each axis.


Extrude it and  add additional supporting loops. Make sure, subdivision works well


For the top pieces, make a single one and duplicate them with the array modifier. During modeling, rely on mirror and array modifier, apply them only before exporting. The topology is going to be almost the same as at the base, but we can use the adjacent connections to our advantage.


Here is, how one piece could connect to an adjacent piece using the mirror and array modifier.




This would be the resulting geometry. It subdivides well, but is extremely convoluted with meaningless edges just for the sake of okay-ish topology.
Third time's a charm: Use disconnected pieces of geometry for disconnected objects.