Czy istnieje dobra zasada lub test, który mogę wykonać, aby określić, czy dana metoda lub pole należy do klasy? Jak rozpoznać, kiedy członek nie należy?Czy istnieje heurystyka, aby określić, czy dana metoda lub pole należy do klasy?
Uważam, że moja największa przeszkoda w projektowaniu obiektowym próbuje ustalić, co się dzieje. Wygląda na to, że jest zbyt wiele przypadków, w których odpowiedź brzmi: "może tu być lub".
Oto krótki przykład typu rzeczy mam zmaga się z:
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
Przedmiotem ITDepartment
zarządza 2 grupy Employees
... ale powinien wiedzieć, że Employees
mieć umiejętności? Czy należy przesunąć metodę taką jak AddSkillToGroup
?
EDIT:
Wydaje się, że zgoda co do tej pory jest to, że ITDepartment nie powinien wiedzieć o umiejętności pracowników. Będę grał adwokata diabła, aby zilustrować, gdzie moje zamieszanie wchodzi w grę.
ITD składa się z dwóch kolekcji Pracowników. Czy nie powinien móc przekazywać przedmiotów do kolekcji? Metoda AddSkill nadal należy do klasy Employee. ITDepartment po prostu instruuje swoją grupę pracowników, aby dodali umiejętności do każdego z jej członków.
Pytasz, JEŚLI powinieneś delegować? Odpowiedź zawsze brzmi "tak". A może pytasz JAK PRZEPEŁNIAĆ? Jeśli tak, popraw swoje pytanie. A może zadajesz inne pytanie dotyczące delegacji? –
Zastanawiam się, czy to jest w porządku dla klasy ITDepartment, aby "dotrzeć przez" i przekazać do klasy Employee przez listę (pracownika), z której się składa (jak to robi, gdy wywołuje e.AddSkill powyżej). –