Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB. NET] Dipendenze circolari

    Vi spiego il problema.
    Nella mia soluzione ho creato due librerie di classi:
    - GestionePosizioni
    - GestioneAnagrafica
    Le due classi trattano argomenti differenti, ma in alcune funzioni, l'una deve poter utilizzare anche gli oggetti dell'altra. Nella mia soluzione, ho dunque aggiunto il progetto GestioneAnagrafica come riferimento al progetto GestionePosizioni, e tutto funzionava.
    Facendo però anche il processo inverso, ovvero aggiungendo il progetto GestionePosizioni come riferimento al progetto GestioneAnagrafica, mi da un errore, dicendo che è impossibile aggiungere il progettom poichè crea un riferimento circolare.
    E' possibile risolvere questo problema, oppure ho sbagliato proprio a creare due classi differenti???


  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    E' possibile risolvere questo problema, oppure ho sbagliato proprio a creare due classi differenti???
    Canonicamente .... la seconda.

    Ma non ad aver creato due anzichè una ma 'solo' due.
    A te serve, a naso, uno o più oggetti intermedi che le due classi 'espongono' reciprocamente.

    Ovvio che mancano molte informazioni per aiutarti.
    Ciao, Brainjar

  3. #3
    Dunque, la libreria di classi GestioneAnagrafica implementa oggetti e metodi che permettono di gestire le anagrafiche, mentre la libreria di classi GestionePosizioni implementa oggetti e metodi che permettono di gestire le posizioni (dette anche pratiche). Le due librerie di classi erano fino ad ora indipendenti. Importando una di queste librerie di classi nella soluzione, si aveva la completa possibilità di gestione.
    Adesso, però, ho la necessità di utilizzare reciprocamente alcuni oggetti di entrambe le librerie di classi. Pertanto, ho inserito nella GestioneAnagrafica il riferimento alla libreria di classi GestionePosizioni. In questo caso, tutto funzionava a meraviglia... la classe GestioneAnagrafica accedeva agli oggetti di GestionePosizioni e li utilizzava per fare determinate cose. Poi, arrivata la necessità di utilizzare gli oggetti della libreria di classi GestionePosizioni nella libreria di classi GestioneAnagrafica, ho cercato di aggiungere il riferimento, ma mi sono imbattuto nell'errore della dipendenza circolare,. perchè sembra che non si possa avere riferimenti reciproci.
    Adesso, naturalmente, potrei mettere il tutto in una singola libreria di classe, in modo da avere tutti gli oggetti a portata ed evitando il problema, ma concettualmente le due librerie di classi trattano effettivamente cose diverse, e pertanto come soluzione non mi pare appropriata (anche se funziona).


  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ma se sono diverse le lasci diverse, in dll diverse, e le referenzi entrambe.. non capisco dove sta il problema

    ameno che una delle due (o entrambe) non abbiano bisogno (loro) di "usarsi a vicenda" allora vanno per forza in una stassa dll (o si fa una classe terza con le cose comuni)

  5. #5
    Originariamente inviato da Stoicenko
    ameno che una delle due (o entrambe) non abbiano bisogno (loro) di "usarsi a vicenda" allora vanno per forza in una stassa dll (o si fa una classe terza con le cose comuni)
    Infatti, il problema è che devono "usarsi a vicenda". Allora metterò tutto nella stessa dll... la terza classe è una soluzione che avevo preventivato, ma però non riesco a determinare a priori le cose che verranno utilizzate in comune.

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Originariamente inviato da Stoicenko
    ma se sono diverse le lasci diverse, in dll diverse, e le referenzi entrambe.. non capisco dove sta il problema

    ameno che una delle due (o entrambe) non abbiano bisogno (loro) di "usarsi a vicenda" allora vanno per forza in una stassa dll (o si fa una classe terza con le cose comuni)
    E' quello che dicevo anche io.

    Concettualmente è sbagliato avere classi che si usano a vicenda.
    E' come se tu volessi costruire un'auto utilizzando un motore che pero fa parte di un'altra auto che a sua volta utilizza i freni che fanno parte dell'auto alla quale deve dare il motore :
    (Questo è un esempio di riferimento circolare).

    Non hai una classe Motore a se stante, ne hai una classe Freno a se stante.
    Se devi costruire una sola auto può andare bene (anche se aprendo il vano motore vedrai
    un'altra auto di cui ti serve solo il motore.....).

    Ma per costruire auto diverse nell'allestimento ma con parti simili (ruote, motori, freni ecc....) e quindi secondo l'approccio OOP, D E V I utilizzare classi il più possibile indipendenti, le cui funzionalità siano definite mediante interfacce.

    Chiaro ?
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.