Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

Filmdatabase ontwerp

Pagina: 1
Acties:

  • bastv
  • Registratie: September 2005
  • Laatst online: 15-11 00:39
Ik ben een beginnend C# programmeur (heb wel ervaring met andere programmeertalen)

Nu wil ik voor mezelf wat meer kennis op doen door een test projectje op te zetten.
Het doel is om mijn film collectie (grote hobby) op een rij te krijgen.
Ik wil film informatie van verschillende sites automatisch downloaden, maar imdb moet leading zijn.

imdb id moet dus altijd aanwezig zijn en de acteurs die er in spelen moeten niet aan te passen zijn.
Bij een acteur of een regisseur moet ook de imdb id verplicht zijn zodat je later altijd goed kan zoeken.

Nu loop ik alleen vast met het ontwerp van deze applicatie (vooral de keuze van class library(s))

Wat ik denk dat sowieso gemaakt moet worden is een class library "Film"
In die library komt dan:
class Movie -> ImdbID, Titel,Rating etc.
class Person -> ImdbID, Name, Birthday etc.
class Actor : Person ->
class Director : Person ->

Nu loop ik alleen vast hoe ik iets generiek opzet voor meerdere sites (imdb,amazon,bol.com etc.)
Ik heb 1 class om site content te downloaden gethtml(string url) die moet overal gebruikt worden.

Moet er voor elke site een class library aangemaakt worden of kan het in 1 library?
Hoe om te gaan met regular expressions per site. dit moet makkelijk aanpasbaar zijn zonder opnieuw te hoeven compileren. Moet dit met een settings file of kan het beter?

En wat als er een site bij komt? kan iemand mij op weg helpen met een goede structuur?

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 16-11 09:49

Cyphax

Moderator LNX
Je kunt voor elke site een class maken (obv een abstracte parentclass eventueel), met daarbij misschien een classfactory om de goede site te instantieren in de rest van je code, of anders doe je het handmatig (maar dan wordt het uitbreiden weer iets minder handig). Je zorgt ervoor dat al deze classes dezelfde informatie teruggeven (en laat die class zelf maar uitzoeken hoe ie eraan komt), die je dan verwerkt.

Hoe je dat gaat doen met iets als regexes in files: laat elke class dat ook zelf maar uitzoeken. Als je niet je programma opnieuw wilt compilen moet je alles in een dll gaan zetten, maar die zul je dan bij wijzigingen wel moeten compilen. Of misschien een dll per site-specificieke class, die je automatisch moet gaan laden.

[ Voor 28% gewijzigd door Cyphax op 30-07-2008 19:32 ]

Saved by the buoyancy of citrus


  • Brede P
  • Registratie: Oktober 2000
  • Laatst online: 16-11 11:29
Kijk de kunst eens af bij bijv. het programma Movie Collector van Collectorz.com, da's een soortgelijk project volgens mij.
Gebruik het programma inmiddels al enige tijd, en is goed te gebruiken.
Deze check standaard IMBD, download zelfs een thumb voor de cover van de film enz...
Hij is er overigens ook voor games, etc.
Misschien wel een ideetje om in je eigen versie mee te pakken, kun je ook direct je eventuele games/muziekCD's etc. er bij plaatsen...

Systemspecs


  • bastv
  • Registratie: September 2005
  • Laatst online: 15-11 00:39
ok en dat allemaal in 1 library? samen met de film,actor etc. class? of dat wel apart doen?

Is het ook aan te raden om een directory aan te maken sites?
zodat je dit krijgt: sites\imdb.cs, sites\amazon.cs

--edit
@ brede P
Het nadeel is dat je niet onder de moterkap kan kijken. hoe het ingericht is en dat is juist het probleem

[ Voor 23% gewijzigd door bastv op 30-07-2008 19:35 ]


Verwijderd

bastv schreef op woensdag 30 juli 2008 @ 19:34:
ok en dat allemaal in 1 library? samen met de film,actor etc. class? of dat wel apart doen?

Is het ook aan te raden om een directory aan te maken sites?
zodat je dit krijgt: sites\imdb.cs, sites\amazon.cs
Als je in deze fase zit zal het je toch niet boeien hoe de directorystructuur eruitziet?

En wat bedoel je met libraries? Losse dll files? Ik zou alle generieke basisfunctionaliteit in een dll stoppen, en alle site-specifieke dingen elk in een eigen plugin. Die site-specifieke classes laat je natuurlijk een interface implementeren, dat is lekker handig voor zo'n plugin-systeem.

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 16-11 09:49

Cyphax

Moderator LNX
bastv schreef op woensdag 30 juli 2008 @ 19:34:
ok en dat allemaal in 1 library? samen met de film,actor etc. class? of dat wel apart doen?
Als het niet gaat veranderen: waarom zou je het in heel veel libraries zetten? Kijk even naar de functies van verschillende onderdelen, zet die naast elkaar en kijk dan even.
Is het ook aan te raden om een directory aan te maken sites?
zodat je dit krijgt: sites\imdb.cs, sites\amazon.cs
Ja lijkt me wel. Maakt voor je programma verder niet zo heel gek veel uit lijkt me, maar het programmeert wel iets fijner als je niet een root hebt vol met allerhande rommel.
Verwijderd schreef op woensdag 30 juli 2008 @ 19:37:Die site-specifieke classes laat je natuurlijk een interface implementeren, dat is lekker handig voor zo'n plugin-systeem.
In mijn voorstel neemt de abstracte class de functie van de interface over maar een interface is ook goed. Wel iets mee doen in ieder geval, daar heb je later profijt van.

[ Voor 22% gewijzigd door Cyphax op 30-07-2008 19:39 ]

Saved by the buoyancy of citrus


  • bastv
  • Registratie: September 2005
  • Laatst online: 15-11 00:39
ok bedankt ik krijg er nu een beter beeld bij.
Nog 1 vraag, generieke functies zoals gethtml is dat verstandig om in een apparte dll te stoppen?

en als iemand nog tips heeft zijn die ook altijd welkom!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Zijn actor en director niet gewoon een subclass van een person?

edit:
laat maar, had even wat in de startpost gemist

[ Voor 34% gewijzigd door Noork op 30-07-2008 19:52 ]


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 16-11 09:49

Cyphax

Moderator LNX
bastv schreef op woensdag 30 juli 2008 @ 19:50:
ok bedankt ik krijg er nu een beter beeld bij.
Nog 1 vraag, generieke functies zoals gethtml is dat verstandig om in een apparte dll te stoppen?
Niet voor 1 functie, waarom zou je dat doen? Wat denk je dat het voordeel daarvan zou zijn?

Saved by the buoyancy of citrus


  • bastv
  • Registratie: September 2005
  • Laatst online: 15-11 00:39
zullen nog meer functies instaan om html opmaak beter te maken etc.
misschien omdat het dan generieker is?? maar niet noodzakelijk.

class library common
class library movie
application moviemanager

zoiets? of is common overkill?

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 16-11 09:49

Cyphax

Moderator LNX
Die shared libraries zijn leuk als je ze later wilt gebruiken, als je dus van plan bent een soort frameworkje op te zetten boven op .net. Zo niet: niet overal losse dll's van maken, da's nergens voor nodig.

Saved by the buoyancy of citrus


  • SiErRa
  • Registratie: Februari 2000
  • Laatst online: 16-11 11:02
Voordat je allemaal HTML parsers gaat bouwen, kijk ook even of de sites geen webservice api's aanbieden. Zoals Amazon die bijvoorbeeld heeft: http://www.amazon.com/gp/browse.html?node=3435361

  • tweaker76
  • Registratie: Augustus 2008
  • Laatst online: 16-11 09:29
Nu loop ik alleen vast met het ontwerp van deze applicatie (vooral de keuze van class library(s))

Wat ik denk dat sowieso gemaakt moet worden is een class library "Film"
In die library komt dan:
class Movie -> ImdbID, Titel,Rating etc.
class Person -> ImdbID, Name, Birthday etc.
class Actor : Person ->
class Director : Person ->

Nu loop ik alleen vast hoe ik iets generiek opzet voor meerdere sites (imdb,amazon,bol.com etc.)
Ik heb 1 class om site content te downloaden gethtml(string url) die moet overal gebruikt worden.

Moet er voor elke site een class library aangemaakt worden of kan het in 1 library?
Je vragen over de inhoud van een class zijn structuur gerelateerd. Andere vragen in deze categorie zijn: Wat zijn de relaties tussen classes en indien relevant wat is het type relatie (associatie, aggregatie, compositie, etc). Wat zijn class member variabelen? Wat is het gedrag van deze class? Waarom deel je classes op een bepaalde manier in? Het vinden van antwoorden op deze vragen is onderdeel van de informatie analyse fase. Structuur kan je vast leggen in bv in UML met behulp van static stucures charts. Tip: begin op papier en niet met een tool, zo kan je focusseren op de inhoud ipv van het tool. Een begin om met informatie analyse mbv UML aan de slag te gaan kan zijn http://en.wikipedia.org/wiki/Class_diagram

Hier enkele overwegingen om classes te groeperen in een bibliotheek. Een rede om classes in een bibliotheek te zetten kan zijn om functionaliteit te hergebruiken. Je maakt een bibliotheek project aan en zet deze classes hierin, client projecten maken gebruik van deze bibliotheek (misschien iets te open deur). Een andere rede om een bibliotheek te gebruiken kan zijn om de onderhoudbaarheid voor de toekomst te waarborgen. Software Configuratie Management tools maken het mogelijk om meerdere versies van een file (class) te hebben, het is dan noodzakelijk dat je de file ook maar een keer in je project/source tree hebt staan. Een ander criteria om classes in een bibliotheek te zetten is op basis van overeenkomstige interfaces en of functionaliteit.

Veel antwoorden zijn valide. Tip: bedenk vooraf een rationale en wat je wilt bereiken, evalueer achteraf en leer van gemaakte keuzes. Succes.

  • MicroWhale
  • Registratie: Februari 2000
  • Laatst online: 14-11 08:31

MicroWhale

The problem is choice

even beginnend bij het onderliggende datamodel:

table Movie
ID, Titel,Rating, etc.

table Person
ID, Name, Birthday, etc,

table MovieReferences
MovieID, site, siteID

table PersonReferences
PersonID, site, siteID

In de siteID stop je dan bijvoorbeeld het "opzoeknummer" van imdb
Zo kan een movie een oneindig aantal referenties hebben.

Hoe je dit in je classes wilt verwerken? Ongeveer hetzelfde. Wellicht kun je een Reference class maken die afhankelijk van zijn parent class zijn data uit andere tables haalt.

Het enige belangrijke is dat je vandaag altijd rijker bent dan gisteren. Als dat niet in centen is, dan wel in ervaring.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-11 11:40

Janoz

Moderator Devschuur®

!litemod

Project is in C# en heeft geen legacy, waarom zou je je dan eigenlijk nog vermoeien met het opstellen van een database model? Het lijkt me veel voor de hand liggendeer om gewoon een net class diagram op te zetten waarbij een Film een lijst acteurs, regiseurs en andere properties heeft. Het hele database model laat je vervolgens door een OR-mapper genereren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • tweaker76
  • Registratie: Augustus 2008
  • Laatst online: 16-11 09:29
Een goed ontwerp kan alle requirements onderbrengen en voorziet nog in enige relevante rek. Is data persistentie een eigen verantwoordelijkheid (requirement)? Tip: probeer de volgorde: functionele specificatie, ontwerp, implementatie aan te houden. Misschien is een database implementeren helemaal niet relevant.
Pagina: 1