Esiste una buona regola empirica o un test che posso eseguire per determinare se un metodo o un campo appartiene a una classe? Come si può identificare quando un membro non appartiene?Esiste un'euristica per determinare se un metodo o un campo appartiene a una classe?
Trovo che il mio singolo più grande ostacolo nel design orientato agli oggetti stia cercando di capire cosa va dove. Sembra che ci siano troppi casi in cui la risposta è: "potrebbe andare qui o lì".
Ecco un rapido esempio del tipo di cosa che sto lottando 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
L'oggetto ITDepartment
gestisce i 2 gruppi di Employees
... ma dovrebbe sapere che Employees
hanno abilità? Dovrebbe essere trasferito un metodo come AddSkillToGroup
?
EDIT:
Sembra che il consenso finora è che l'ITDepartment non dovrebbe conoscere le competenze dei dipendenti. Suonerò un po 'l'avvocato del diavolo per illustrare dove entra in gioco la mia confusione.
ITDepartment è composto da due raccolte di dipendenti. Non dovrebbe essere in grado di delegare a tali elementi di raccolta? Il metodo AddSkill appartiene ancora alla classe Employee. L'ITDepartment sta semplicemente istruendo il proprio gruppo di dipendenti ad aggiungere un'abilità a ciascuno dei suoi membri.
Stai chiedendo SE devi delegare? La risposta è sempre "sì". O stai chiedendo come delegare? Se è così, ti preghiamo di risolvere la tua domanda. O stai facendo qualche altra domanda sulla delega? –
Mi chiedo se va bene che la classe ITDepartment "raggiunga" e deleghi alla classe Employee tramite l'Elenco (Of Employee) di cui è composto (come fa quando chiama e.AddSkill sopra). –