¿Cómo debo dividir las clases grandes y abultadas en otras más pequeñas?

Tengo una gran clase de 'Manager' que creo que está haciendo demasiado pero no estoy seguro de cómo dividirla en unidades más lógicas.

En términos generales, la clase consiste básicamente en los siguientes métodos:

class FooBarManager
{
  GetFooEntities();
  AddFooEntity(..);
  UpdateFooEntity(..);
  SubmitFooEntity(..);
  GetFooTypes();
  GetBarEntities();
}

La clase Manager es parte de mi lógica de negocios y constituye una instancia de otra clase "Manager" en el nivel de acceso a datos que contiene todas las operaciones CRUD para todas las entidades.

Tengo diferentes entidades que provienen de la capa de acceso a datos y, por lo tanto, tengo un convertidor fuera de la clase Manager para convertir entidades de datos en entidades comerciales.

El motivo de las clases de administrador era que quería poder burlarme de cada una de las clases de "Administrador" cuando realizaba la prueba de unidad. Cada una de las clases de administrador ahora tiene más de 1000 loc y contiene 40-50 métodos cada una. Considero que están bastante hinchados y me resulta incómodo colocar toda la lógica de acceso a los datos en una sola clase. ¿Qué debería estar haciendo diferente?

¿Cómo voy a dividirlos? ¿Debo usar algún patrón de diseño específico?

Respuestas a la pregunta(4)

Su respuesta a la pregunta