196 messaggi dal 12 febbraio 2016
Ciao a tutti,
vorrei capire come distribuire all'interno della mia soluzione tutto il codice che serve ad una webapp, mi spiego meglio.

Ho un piccolo shop con questi entity: Prodotto, PrezzoProdotto, Promozione.
Nella webapp ho pensato di gestire vari prezzi per ciascun prodotto e varie promozioni.

Usando EF recupero l'oggetto Prodotto con tutte le sue proprietà.
Ora per recuperare il prezzo giusto (secondo alcuni filtri oppure secondo una determinata promozione), dove scrivo il codice relativo al prezzo?

Uso dei metodi statici all'interno della classe prodotto? Uso un ProdottoHelper?

Mi suggerite come organizzare le varie classi del progetto?
Mi andrebbe bene anche un url su Github (o simili) per prendere spunto da un progetto esistente.

Grazie
120 messaggi dal 19 ottobre 2005
Ciao Piero.

Io per le mie applicazioni in genere cerco di organizzare il codice secondo i principi della Clean Architecture: https://jasontaylor.dev/clean-architecture-getting-started/. Anche se utilizzi una sola soluzione monolitica puoi comunque organizzare il codice in questo modo.

Metodi statici all'interno dell'entità prodotto, dovendo accedere al database, io li escluderei.
196 messaggi dal 12 febbraio 2016
Grazie Santoni,
quindi mi sembra di capire che la strada da prendere è un Repository.
Un esempio in MVC 5, non core?

grazie cmq
120 messaggi dal 19 ottobre 2005
Io personalmente lo implementerei, ma usare o meno il Repository è una scelta (tua), Il Repository pattern è (spiegato un po' velocemente) un design pattern che ti aiuta a definire la relazione tra le entità della tua applicazione (Prodotto, Prezzo, Promozione, ecc.) con il layer infrastrutturale che si occupa di recuperare/manipolare fisicamente i dati (nel tuo caso Entity Framework) mentre, la Clean Architecture, è (sempre per sommi capi) un architettura che serve ad aiutarti a separare i layer dell'applicazione (UI, business logic, entità, infrastructure, ecc.).
Si tratta di argomenti vasti ed è difficile spiegare tutto in un post su un forum. Se ti interessa l'argomento ci sono libri e articoli ben scritti che ti possono aiutare a capire meglio l'argomento.
196 messaggi dal 12 febbraio 2016
Si certo,
comprendo che il discorso è molto vasto e ti ringrazio per il supporto.

Grazie ancora
196 messaggi dal 12 febbraio 2016
Quindi giusto per dare una risposta alla mia domanda:
realizzando un repository, per impostare il giusto prezzo ad un prodotto potrei fare qualcosa simile a questo?


public class ProdottiRepository : EfRepository<Prodotto>
        {
            public ProdottiRepository(ApplicationDbContext dbContext) : base(dbContext)
            {
            }

            public Prodotto Item(int id)
            {
                var prodotto = _dbContext.Prodotti.Find(id);


                var promozione = _dbContext.Promozioni.Where(x => x.PrdId == id).First();

                if (promozione != null)
                {
                    prodotto.Importo = ... // calcolo importo scontato
                }

                return prodotto;

            }
        }



Potrebbe andare bene questa procedura?
120 messaggi dal 19 ottobre 2005
Se posso darti un consiglio, anziché Item usa un nome più parlante tipo GetById o qualcosa del genere.
Immagino che quel codice che hai postato sia solo a scopo di esempio; quindi, ignoro il fatto che non conosco la classe base (né il resto della soluzione) e che manca di tutta la parte di gestione degli errori tipo se non trova il prodotto, ecc., però direi che ad occhio può andare bene, forse potresti ottimizzarlo un po' facendo in modo da fare una sola chiamata al db usando una join ma è solo una mia fissa sull'ottimizzazione, non inficia sul risultato finale.

PS. Credo che, per come hai scritto l'esempio, volessi usare FirstOrDefault nel tuo esempio. Il metodo First solleva un'eccezione se non trova l'id.
Modificato da santoni1981 il 15 settembre 2021 13:57 -
196 messaggi dal 12 febbraio 2016
Ti ringrazio tanto Santoni,
mi suggeriresti un progetto o tutorial da prendere spunto?
Magari con un progetto MVC non in versione core?

grazie di tutto

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.