Game architecture best practices

Is there any best practices guides, or just advice regarding the best approach to game architecture for Unity? In particular Unity's component system seems to allow a completely different approach than standard object oriented design.

For example, generally composition is favored over inheritance and the component system makes composition so easy that it seems that inheritance is redundant. I realize you have to inherit from internal Unity classes like MonoBehaviour but I'm referring to inheritance of user created classes.

Similarly polymorphic behaviour doesn't require an abstract base class, you can just replace 'component A' with 'component B' to get different behaviour.

I'm moving toward this way of thinking lately and it got me wondering if there are any guides or resources that outline how to approach architecture in Unity.

I have just started to use Unity and was looking for some resources on this myself.

There is an excellent video on the subject by Mike Mittelman of Hangout Industries from Unite 2008 that can be found on Unity3d.com http://unity3d.com/support/resources/unite-presentations/techniques-for-making-reusable-code

Also check out http://forum.unity3d.com/threads/37896-Programming-architectures (I am currently using the iPhone friendly NotificationCenter class by Prime31 and it works in a similar way to the Actionscript 3 event model).

I found this thread a couple of months ago lacking a good answer, just found this page with more information I could ever dream of specific to unity:

50 Tips for working with unity - Best practices

Unity is a game engine and like probably all other premade engines on the market, it uses Component based software architecture. That means you see all parts of your game like components i.e I can put one component A into another component B which will give behavior A to the component B. For example I can add keyboard component to my component Player in order to make my Player move with keyboard buttons. As simple as that. If you were to use polymorphism and inheritance you could possible end up in inheritance mess, very hard to maintain.
Engineers found that Component based structure is the best way to make a game engine.

I would recommend a rather old book on the OOD patterns which is kind of too broad but you will find Component pattern there as well: http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612

This is also a good intro to Component based software engineering

Edit: The biggest problem of component based architecture is that all that visual and bussines logic is mixed within a component aka MonoBehavior. And even if you try to separate visual from bussines logic you will again need to use inheritance which will end in a mess. So I would recommend, functionality that can stand alone or in separate C# class to be moved from a MonoBehavior. That way your code will stay clean and maintainable.