Entity Component System
With ECS, you just add functionality to entity. This means, that difference between player entity and AI entity is just an AIComponent. If entity has AI component, then the system will drive it towards it's goals, if its player component, then it uses input to drive the entity.
Entity
Entity in this system is just an ID to refer from code and container to hold components. The functionality of the entity is composed with components. In game perspective, everything is entities. Items, players, enemies, world, you name it.
Component
Components are data holders, data templates. Position component in 2D game, would have two integers, x and y. That's it. Component is data holder for all the data that is needed to produce the functionality of the component. In case of position component, that would be the location, a point in space. It's very important to understand, that components don't contain any information about implementation. It just keeps the data of this component for entity that it's attached to.
System
Systems build up the game engine. These provide the wanted functionality. Systems modify the data inside the components of entities. System can be some major part of the engine. There could be 2DRenderSystem, that looks for entities that has 2DSprite-component and position-component attached or there could be MovementSystem, that looks for entities that has position- and movement-components. Systems are only interested in those entities that has all the needed components for prosessing.
System is the part of your code, that does the work. That's what makes things happen.
My testings
I have done some testings with this kind of system and it indeed looks good. I like the idea, that i can with one component, add the collision detection for certain item or that by setting Health-component to entity i can make it mortal. I don't have to write classes for all the different mobs and players nor i don't have to come up with some clever inheritance system.
world.RegisterRenderSystem(new TiledMapRenderSystem());
world.RegisterSystem(new BasicControllingSystem());
world.RegisterSystem(new TiledMapCollisionSystem());
world.RegisterSystem(new MovementSystem());
world.RegisterSystem(new ColliderUpdateSystem());
world.RegisterRenderSystem(new CollisionBoxRenderSystem());
world.RegisterSystem(new Camera2DSystem());
world.RegisterRenderSystem(new Render2DSystem());
Entity mapEntity = world.CreateEntity();
mapEntity.AddComponent(new TiledMapComponent("Content/rpgtest.tmx"));
Entity player = world.CreateEntity();
player.AddComponent(new PositionComponent(0, 0));
player.AddComponent(new MovementComponent());
player.AddComponent(new SpriteComponent("Blue-Monster"));
player.AddComponent(new BasicControllerComponent());
player.AddComponent(new Camera2D(true, "", new Vector2(320, 320), new Rectangle(0, 0, 1600, 1600)));
player.AddComponent(new ColliderComponent());
That's example code from my test environment. It loads map, renders map and player entity. Allows movement, sprite, camera following, colliding with map..
Some links to check out!
http://www.gamedev.net/page/resources/_/technical/game-programming/understanding-component-entity-systems-r3013
http://en.wikipedia.org/wiki/Entity_component_system
http://gamadu.com/artemis/
https://github.com/thelinuxlich/artemis_CSharp