Есть ли хорошее практическое правило или тест, который я могу выполнить, чтобы определить, принадлежит ли метод или поле классу? Как определить, когда член не принадлежит?
Я обнаружил, что мой самый большой камень преткновения в объектно-ориентированном дизайне пытается выяснить, что и куда идет. Кажется, что есть слишком много случаев, когда ответ таков: «он может пойти сюда или туда».
Вот краткий пример того, с чем я борюсь:
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
Объект ITDepartment
управляет двумя группами Employees
... но должен ли он знать, что у Employees
есть навыки? Нужно ли перемещать такой метод, как AddSkillToGroup
?
EDIT:
Похоже, что до сих пор все согласны с тем, что ИТ-отдел не должен знать о навыках сотрудников. Я немного сыграю адвоката Дьявола, чтобы проиллюстрировать, где мое замешательство вступает в игру.
ИТ-отдел состоит из двух коллекций сотрудников. Разве он не должен быть в состоянии делегировать эти предметы коллекции? Метод AddSkill по-прежнему принадлежит классу Employee. ITDepartment просто инструктирует свою группу сотрудников, чтобы добавить навык для каждого из своих членов.