Predpokladajme, že chcete modelovať nasledujúcu situáciu pomocou OOP. Chcete mať triedu používateľa, triedu albumov a triedu fotografií, napríklad
A User has 0 or more Albums
An Album has 1 or more Photos
Pretože si vyžadujem album, aby mala aspoň jednu fotografiu, myslela som si, že by som ju mala dať List<Photo> photos
argument v konštruktérovi mojej triedy Album. Predpokladá sa však, že sa vytvorí zoznam objektov fotografií pred nadradená trieda albumu je vytvorená. Takže nemôžem zahrnúť a Album parentAlbum
argument v konštruktérovi mojej fotografickej triedy, ako som plánoval.
Aký je najlepší spôsob, ako môžem navrhnúť, aby každá fotka mohla odkazovať na jej rodičovské album, ale album nemôže byť vytvorený bez akýchkoľvek fotiek?
odpovede:
1 pre odpoveď č. 1Presne povedané, vlastne si myslím, že by ste nemali odkazovať na rodičov Album
od a Photo
pretože: a) fotografia nepotrebuje, aby album existovala, a b) obmedzujete obnoviteľnosť Photo
v budúcnosti. Ak by ste mohli prísť so spôsobom, ako odstrániť tento odkaz, urobil by som to Album
prehliadaním každého z nich Album
máte alebo ešte lepšie vytvoriť slovník albumov.
Po tom, čo som povedal, ja som definitívne urobil podobné veci sám, pretože to spôsobuje, že kódovanie je oveľa jednoduchšie :) To neumožňuje nastaviť rodičov Album
v Photo
"je to konštruktér, ale pravdepodobne to bude ďalšia najlepšia vec:
class Album {
public Album (List<Photo> photos)
{
if (photos.Count < 1)
{
throw new Exception("Album must have at least one photo.");
}
foreach (Photo thisPhoto in photos)
{
thisPhoto.setAlbum(this);
}
}
}