Cuál es la diferencia entre objetos de dominio, POCO y entidades?

Tenía la impresión de que todos son básicamente lo mismo. ¿Los objetos modelo también son iguales?

Ahora mismo, en mi arquitectura, tengo:

class Person 
{

    public string PersonId;        
    public string Name;
    public string Email;

    public static bool IsVali,dName() { /* logic here */ }
    public static bool IsValidEmail() { /* logic here */ }
}


class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }

    public bool IsExistingEmail(string email)
    {
        //calls repo method to see if email is in db
    }


    public Person GetPerson(email)
    {
        return pRepository.Get(email);
    }


    public void SavePerson(Person p)
    {
        if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email)
        {
            pRepository.Save(p);
        }
    }

}


class PersonRepository
{
    public void Save(Person p)
    {
        //save to db
    }

    public Person Get(string email)
    {
        //get from db
    }

    public bool IsExistingEmail(string email)
    {
        //see if email in db
    }

}

Entonces, ¿cuál de las clases anteriores sonPOCO, Domain Object, Model object, entity?