/ / Ako nastaviť triedy na modelovanie vzťahu one-to-many s aspoň jedným objektom v rozsahu nastavenom - c #, oop

Ako nastaviť triedy na modelovanie vzťahu one-to-many s aspoň jedným objektom v rozsahu nastavenom - c #, oop

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ď č. 1

Presne 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);
}
}

}