¿Existe una buena regla general o prueba que pueda realizar para determinar si un método o campo pertenece a una clase? ¿Cómo se puede identificar cuándo un miembro no pertenece?¿Existe una heurística para determinar si un método o campo pertenece a una clase?
Encuentro que mi obstáculo más grande en el diseño orientado a objetos es tratar de averiguar qué ocurre. Parece que hay demasiados casos donde la respuesta es: "podría ir aquí o allí".
Aquí está un ejemplo rápido del tipo de cosa que estoy luchando con:
Public Class ITDepartment
Private _sysadmins As List(Of Employee)
Private _developers As List(Of Employee)
// properties, public stuff...
Private Sub AddSkillToGroup(ByVal emps As List(Of Employee), ByVal skill As Skill)
For Each e As Employee In emps
e.AddSkill(skill)
Next
End Sub
End Class
El objeto ITDepartment
gestiona los 2 grupos de Employees
... pero debería saber que Employees
tienen habilidades? ¿Debería reubicarse un método como AddSkillToGroup
?
EDIT:
Parece que el consenso hasta ahora es que la ITDepartment no debe saber acerca de las habilidades de los empleados. Interpretaré un poco al abogado del Demonio para ilustrar dónde entra en juego mi confusión.
ITDepartment se compone de dos colecciones de empleados. ¿No debería poder delegar en esos artículos de colección? El método AddSkill todavía pertenece a la clase Employee. ITDepartment simplemente está instruyendo a su grupo de empleados para que agreguen una habilidad a cada uno de sus miembros.
¿Está preguntando SI debe delegar? La respuesta es siempre sí". ¿O estás preguntando CÓMO delegar? Si es así, por favor arregla tu pregunta. ¿O estás haciendo alguna otra pregunta sobre la delegación? –
Me pregunto si está bien que la clase de departamento de TI "alcance" y delegue en la clase de empleado a través de la lista (de empleado) de la que está compuesta (como hace cuando llama a e.AddSkill). –