[C# 2.0] Law Of Demeter

Pagina: 1
Acties:

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 06:21
Ik heb aandachtig een artikel gelezen over de "Law of Demeter", zie http://www.ccs.neu.edu/re...ter/paper-boy/demeter.pdf

Daarin staan wat regels in vermeld om het aantal afhankelijkheden tussen objecten te beperken.

Nu was ik benieuwd of het hebben van een strongly typed collection als public property op een class de Law of Demeter rules breken.... je laat andere objecten toe om de collection te wijzigen namelijk....


Dit is een voorbeeldcode:

De strongly typed collection met bijv. Employee

code:
1
2
public class EmployeeCollection: Collection<Employee>
{}


En de hoofdclass:

code:
1
2
3
4
5
6
7
8
9
10
11
12
class MyClass
{
   private EmployeeCollection _employees;

   public EmployeeCollection Employees
   {
      get
      {
           return _employees;
      }
   }
}

[ Voor 4% gewijzigd door DrDelete op 22-02-2007 17:03 ]


Verwijderd

Leuk artikel in die link!
Breek je met die Collection<Employees> de Law of Demeter? Zeker weten. Dat is nl. die wallet uit het voorbeeld.
Is dat altijd fout? Echt niet! Wanneer een willekeurige paperboy bij die wallet kan is 't foute boel, maar wanneer alleen je butler of je vriendin erbij kan (ervan uitgaand dat je die allebei 100% kunt vertrouwen) is er niks mis mee. En vaak is dat zelfs best handig, want dan kun je de payment-transactie uitbesteden aan een ander, terwijl je zelf belangrijkere dingen kunt doen.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Even offtopic:

Ik zie het nut van een extra class EmployeeCollection niet echt. Of heb je in deze collection nog extra Employee specifieke toevoegingen? Generic collection zijn namenlijk ook al gewoon Stong Typed.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 30-01 15:48

Not Pingu

Dumbass ex machina

Je Employeecollection zou methods moeten hebben als: GetEmployee() of AddEmployee() en vervolgens zelf die acties afhandelen.

In principe regelen Generic collections dit al. Onderhuids maken ze gebruik van arrays voor dataopslag, maar jij krijgt geen directe toegang tot die arrays, alleen via methods of properties.

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Zeker weten??? Wanneer ik een Collection<T> public maak, kan ik er van buitenaf alles mee. De objecten in die Collection kun je wel prima afschermen met getters, setters, methods en properties, maar de Collection zelf niet voor zover ik weet.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 26-01 10:15
Je hebt in .net 2.0 de ReadOnlyCollection<T> zie de msdn

Natuurlijk moet je het "I have a shiny new hammer so every problem looks like a nail"-idioom ook ter harte nemen :).

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:29
Sjaaky schreef op dinsdag 17 oktober 2006 @ 00:24:
Je hebt in .net 2.0 de ReadOnlyCollection<T> zie de msdn
Idd, ik laat meestal m'n classes een ReadOnlyCollection property hebben in dit geval.
Op die manier kan ik makkelijk over m'n collectie iteraten, maar het toevoegen / verwijderen van items aan die collectie, gebeurt via member methods van de class.
klik

https://fgheysels.github.io/


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 30-01 15:48

Not Pingu

Dumbass ex machina

Verwijderd schreef op maandag 16 oktober 2006 @ 22:46:
Zeker weten??? Wanneer ik een Collection<T> public maak, kan ik er van buitenaf alles mee.
Via member methods en properties dus, like I said. Niet rechtstreeks. Dat je via die dingen uiteindelijk alles kunt met die collectie wil niet zeggen dat ze onderhuids niet de controle houden over wat je toevoegt.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Over de Law of Demeter:

In het algemeen ga ik er in code van uit dat er niet meer dan 1 punt mag staan (is in principe hetzelfde).
Pagina: 1