Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Impostare una Classe ArticoloMagazzino
sabato 29 settembre 2007 - 10.50
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Ghitano
Profilo
| Newbie
35
messaggi | Data Invio:
sab 29 set 2007 - 10:50
Dovrei creare una classe nel mio gestionale per gestire gli articoli del magazzino.
all'interno di ciascun elemento vi è un rapporto di uno > molti
es:
a) Articolo (con le sue proprietà, ID, Descrizione, etc..)
- CodBarre single e confezione
- Prezzi Vendita > Listini
- Prezzi Acquisto > Fornitori
etc...
Venendo dal Visual Basic 6 ho difficoltà di tipo concettuali sull'utilizzo delle classi:
vengo al dunque:
Classe CodBar
'per inizializzare la classe
public sub new (IDArticolo as integer )
PROBLEMA : se l'articolo è nuovo e dunque non ho un IDArticolo? Creo un ulteriore sub new senza argomenti?
'proprietò della classe:
IDArt (ID dell'articolo di origine)
Codice (codice a barre)
metodi:
Add (Codbar as string)
Save (per salvare tutti i codici creati nel database)
PROBLEMA
come faccio a creare una matrice di codici a barre da associare all'articolo?
qual'è il modo migliore per creare la classe e gestirla poi nel programma?
quando utilizzo il metodo Add dovrebbe aggiungere il codice a una matrice per poter poi utilizzare ciascun codice in questo modo:
dim Cbar as new Codbar (Articolo.ID)
for x = 1 to Cbar.count
ComboBox1.add (Cbar.Item(x))
next
la classe CodBar dovrebbe contenere al suo interno un type (ex visual basic 6)
o una sottoclasse CodBarSingoloCodice?
Ghitano BitBoys
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 29 set 2007 - 15:30
ciao
>'per inizializzare la classe
>public sub new (IDArticolo as integer )
>
PROBLEMA : se l'articolo è nuovo e dunque non ho un IDArticolo?
>Creo un ulteriore sub new senza argomenti?
si chiaro, tanto internamente hai cmq una variabile, che nel caso non gli passi il valore nel costruttore sara' 0, o meglio ancora -1, cosi' sai che non è stato impostato da nessuno (dato che zero potrebbe anche essere un valore ammesso)
>'proprietò della classe:
>IDArt (ID dell'articolo di origine)
>Codice (codice a barre)
>
>metodi:
>Add (Codbar as string)
>Save (per salvare tutti i codici creati nel database)
qui non sono molto d'accordo.
il punto è che non ti conviene avere entita' cosi' intelligenti da fare anche query su db etc...perche' metti caso che un domani devi cambiare database? o metti caso che devi dividere il lavoro o avere comportamenti diversi per il database in futuro, o meglio ancora devi fare una parte web/palmare dello stesso programma, avere legato l'accesso al database all'entita' che ti serve anche per altri scopi è sbagliato...ovvero ti troverai a dover rifare (quindi con possibilita' di errore e perdita di tempo)
Conviene separare la struttura con qualcosa a livelli, dove le entita' sono comuni a tutti i livelli ma sono oggetti abbastanza semplici da portarsi dietro informazioni e comportamenti strettamente neccessari.
Un parte di gestione, e poi uno strato dati separati si preoccupano di fare il resto, nel caso di strato dati si preoccupera' di fare la query al db e tornarti 1o piu' oggetti di tipo "Articolo", rimepiti e gestiti con le logiche sue.
>
PROBLEMA
>come faccio a creare una matrice di codici a barre da associare
>all'articolo?
>qual'è il modo migliore per creare la classe e gestirla poi nel
>programma?
mettiti una proprieta' "Codici" di tipo "List(Of string)" che è l'insieme di tutti i tuoi codici a barre
>quando utilizzo il metodo Add dovrebbe aggiungere il codice a
>una matrice per poter poi utilizzare ciascun codice in questo
>modo:
>
>dim Cbar as new Codbar (Articolo.ID)
>for x = 1 to Cbar.count
>ComboBox1.add (Cbar.Item(x))
>next
>
usando una proprieta' come lista di stringhe (codici a barre) avresti questa sintassi:
Combobox1.DataSource = cBar.Codici
>
>la classe CodBar dovrebbe contenere al suo interno un type (ex
>visual basic 6)
>o una sottoclasse CodBarSingoloCodice?
qui è lo stesso, se i dati sono pure stringhe di barcode allora va bene come ti ho detto io la proprieta' lista, altrimenti la lista sara' di una classe "CodiceABarre" che ha diverse proprieta' (non saprei quali ma magari tu sai meglio)
cmq la cosa è da approfondire di piu' di quello che ti ho detto io ovviamente, ed è importante che tu lo faccia nel passaggio da vb6 a object-oriented in .net.Percio' ti lascio qualche link come inizio:
http://www.microsoft.com/downloads/details.aspx?familyid=a8381e9c-884d-4cb2-9dbe-255c2790634b&displaylang=en
http://msdn2.microsoft.com/en-us/library/ms978496.aspx
e poi questo download complessivo di "buone norme" di programmazione (Microsoft patterns and practices April 2007 DVD.msi
):
http://www.microsoft.com/downloads/details.aspx?familyid=6724e09b-ca2e-425a-8d71-8febad3ba203&displaylang=en#filelist
e poi qualche bel webcast per architetti tipo:
http://www.microsoft.com/italy/msdn/risorsemsdn/eventi/webcast/architetti/passati/default.mspx
in particolare pagina 2:
- "Domain Driven Design: Overview (Livello 300)"
- "Architecting Layered Applications (Livello 300) "
- "Architettura del software: patterns by example"
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Ghitano
Profilo
| Newbie
35
messaggi | Data Invio:
sab 29 set 2007 - 16:11
Credo di aver risolto:
ho creato all'interno della classe CodBar
una sottoclasse _CBarSingle
con le proprietà
- IDArt as integer
- Codice as string
- Confezione as boolean
Ho creato una variabile nella classe CodBar
Private _CodBar() As _CBarSingle
ho creato il tipo
Public Enum TypeCod
Singolo
Confezione
End Enum
la parte più rognosa della classe Codbar è il metodo Add:
Public Sub Add(ByVal Codbar As String, ByVal confezione As TypeCod)
Dim Cb() As _CBarSingle
Dim ValConf As Boolean
Dim Item As New _CBarSingle
With Item
.CodiceBarre = Codbar
If confezione = TypeCod.Confezione Then ValConf = True Else ValConf = False
.Confezione = ValConf
.IDArticolo = _IDArt
End With
a questo punto utilizzo la variabile _CodBar () come un insieme di Codici
mettiamo che _Codbar() abbia ad esempio due codici
pongo Redim Cb(_CodBar.Lenght) ' quindi più 1 record
for x = 0 to _CodBar.Lenght - 1
Cb(x) = _CodBar(x)
next
e per ultimo:
Cb (_Cb.Lenght - 1) = Item
per chiudere
_CodBar = Cb
sono stato bravo?
per utilizzarlo nel form faccio:
dim Cbar as new Codbar (IDArticolo)
Cbar.Add("87248715", CodBar.TypeCod.Singolo)
per recuperare un codice
for x = 0 to Cbar.Count
Cbar.Item(0)...... (si apre menu popup con tutte le proprietà: Codice, IDArt, etc...)
next
________________________________________________
Sono daccordo con te sulla opportunità di non utilizzare il metodo Save dentro la classe
è un buon suggerimento!
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 29 set 2007 - 16:20
ok,
quello che hai fatto ti ha risolto il problema e ti permette di fare quello che ti serve.
Il mio era un discorso di architettura "generale" di applicazione, di come si puo' progettare un'applicazione inizialmente, per andare meglio poi a mantenerla, ingrandirla, e migliorarla...
Percio' rimango dell'idea che anche se per adesso ti va bene quello che hai fatto, leggiti qualche articolo e guardati qualche webcast su questi argomenti, che sicuramente ti tornano utili...
Ti dico questo perche' spesso il fatto di passare da ambienti come vb6 non object-oriented ad ambienti .net,fa andare in cerca di come si fa a "fare quello che facevi prima", invece di pensare come puoi lo "fare meglio"...un po' come dire: "migro da vb6 a .net, usando il wizard di visual studio" hhhhhhaaaaahahaha non c'e' di piu' sbagliato...se vuoi usare .net è anche per avere un approccio diverso alle applicazioni altrimenti è molto meglio usare ancora vb6 !
Non è certo un'accusa, è solo un consiglio mio...visto che anch'io ho lavorato per anno in vb6 e sinceramente adesso .net ho cambiato approccio, e ovviaemente, non tornerei indietro...
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !