Gjenbruk klasse patterns

Jeg designe et nytt stykke programvare ved hjelp av ECO Modeler, som jeg vil gjennomføre ved hjelp av ECO 2.As jeg har vært modellering forretnings klassene jeg har vært betalende spesiell oppmerksomhet til å skape klasser i mønstre som jeg vil være i stand til å gjenbruke i ulike applikasjoner
MØNSTER. 1: Kontaktinformasjon
I det siste jeg har sagt det, og jeg vil si det igjen! Sammensetningen er kraftigere enn arv! Min kontaktinformasjon mønsteret er et godt eksempel på dette. Ulike typer av klassen ofte krever noen form for kontaktinformasjon (telefonnummer, e-postadresser, etc). For å spare tid reprodusere klasser mange vil hoppe rett inn og opprette en " Kontakt " klasse som har denne diverse informasjon. Da vil de stige andre klasser som [selskapet] og [Person] fra denne klasse.Jeg liker ikke denne tilnærmingen. Arv bør brukes når du vil implementeringen å behandle objekter i en vanlig måte, og ikke av hensyn til å redusere mengden av arbeid du må gjøre når du utformer model.Take en [Booking] som et eksempel. Det kan være lurt å ta opp diverse informasjon i forhold til en bestilling. Tydeligvis booking ville ha en tilknytning til en person, men hva hvis du ønsket å holde historisk kontaktinformasjon? Kontaktinformasjonen for den personen kan endre seg i fremtiden, og deretter historisk informasjon går tapt. Gjør du gjør [Booking] a [Ta kontakt med] også? Hva om du ønsker å ta opp [Arkiv] steder? Vil du ned [Van], [Room], [Building], [VendingMachine] fra en felles klasse? Hva om en [person] kan holde lager, samt tak kontaktinformasjon? Arv kan være en reell rot! I stedet ville jeg lage et sett med klasser som vist ovenfor. A [ContactInformationHolder] er ansvarlig for å holde kontakt information.When Jeg ønsker en bestemt klasse å ha en samling av [Contact] jeg bare lage en enveis forening fra klassen (f.eks " Person ") til [ContactInformationHolder]. Ved hjelp av denne tilnærmingen jeg er i stand til å gjøre [Person] innehaver av [Stock] OG også i stand til å holde en rekke stykker av [Contact]
MØNSTER 2: Kontaktinformasjon - Land
Jeg prøvde å tenke. opp en gjenbrukbar måte å modellere en [PostalAddress]. Logisk du bør være i stand til å bestemme hvilke [land] en [PostalAddress] tilhører, så min første instinkt var å modellere en forening fra [PostalAddress] direkte til [land] .En av mine kunder ikke bare ønsker å vite hvilket land en person bodde i, de ønsket å kategorisere dem ved en slags geografisk region også. Legge til en [Region] tilknytning til [land] og [PostalAddress] virket feil for meg. Det vil være mulig å spesifisere UK som landet, og en USA tilstand som regionen, ville jeg nødt til å inkludere begrensninger for å se etter dette. Det bare hele virket litt messy.So, jeg kom opp med thisNow i stedet for å bli assosiert direkte til en [land], en [PostalAddress] er faktisk forbundet til en [GeographicLocation]. Dette betyr at [PostalAddress] kan enten tilhøre direkte til en [land] for kunder som ikke ønsker regioner, eller en [GeographicArea] for dem som gjør. I den ovennevnte modell er det mulig å skape et land som har mange regioner, og hver av disse regionene kan også ha underregioner. Hvis en kunde ønsket de kunne kategorisere til et nivå så høyt som Land /stat /by /Town.The " Sti " avledet krets returnerer bare en samling av [GeographicLocation], slik at det er mulig å vise hele området som en streng. Så i stedet for " Acocks Green " (hvor jeg bor) kan du bestemme området som " Storbritannia /England /West Midlands /Birmingham /Acocks Green " .Så at jeg enkelt kan bestemme [land] som en [GeographicLocation] hører jeg lagt en annen avledet forening. I base klassen er det utledet som " Country.emptyList ". I [land] klassen er det utledet som " selv ", og i " GeographicArea " klasse det er avledet som " self.parentArea.country ".
MØNSTER 3: AddressFinally, var jeg i stand til å skape en [adresse] klassen til min tilfredsstillelse. Jeg ville ikke trenger en felles stamfar for mine klasser å ha kontaktinformasjon, og mine kunder kan enten referere direkte til et land, eller noen grad av geografisk fordeling de ønsker.
Min [adresse] klassen rett og slett har en Postal attributt en eller flere [AddressLine] objekter, og en forening til en GeographicLocation.
KONKLUSJON


    Forhåpentligvis disse mønstrene vil være generisk, men fleksibel nok til å bruke i hvilket som helst program.