Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Postojili elegantniji nacin?

[es] :: .NET :: .NET Desktop razvoj :: Postojili elegantniji nacin?

[ Pregleda: 1432 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
109.93.35.*



+1 Profil

icon Postojili elegantniji nacin?04.01.2010. u 22:35 - pre 173 meseci
Za pocetak srecna Nova i svi predstojeci praznici
Radim neki programcic oko serialPorta, medjutim to sad i nije u centru ovog pitanja, ali cu ipak trenutni problem iskoristiti za objasnjenje problema. Naime, imam formu Form1 na kojoj imam elemente button, radiobutton, textBox,... Sama forma je interfejs, dok sam u class PortProperties definisao objekat SerialPort i sve potrebne parametre za njegovo otvaranje, zatvaranje i sve promene na elementima na Form1 koji se vezuju za ove evente. Sve ovo radi super, ali mi je koncept bio da sada i Write i Received Data odvojim kao posebne klase jer je prijem i slanje podataka malo komplikovaniji, pa nebih da zatrpam class PortProperties. Medjutim, tu sam naisao na problem. Pritiskom dugmeta koje se nalazi na Form1 trebo bi da posaljem neki string npr. "Hello!". Ono sto mi je uspelo izgleda otprilike ovako:

Code:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        PortProperties portProperties = new PortProperties();

        private void btnSend_Click(object sender, EventArgs e)
        {
            portProperties.Send("NUL");
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            portProperties.OpenPort();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            portProperties.ClosePort();
        }
}



Code:

    class PortProperties
    {        
        Send send = new Send();

        private string _baudRate = string.Empty;
        private string _parity = string.Empty;
        private string _stopBits = string.Empty;
        private string _dataBits = string.Empty;
        private string _portName = string.Empty;
        private SerialPort comPort = new SerialPort();

        public string BaudRate
        {
            get { return _baudRate; }
            set { _baudRate = value; }
        }

        public string Parity
        {
            get { return _parity; }
            set { _parity = value; }
        }

        public string StopBits
        {
            get { return _stopBits; }
            set { _stopBits = value; }
        }

        public string DataBits
        {
            get { return _dataBits; }
            set { _dataBits = value; }
        }

        public string PortName
        {
            get { return _portName; }
            set { _portName = value; }
        }

        public PortProperties()
        {
            _baudRate = string.Empty;
            _parity = string.Empty;
            _stopBits = string.Empty;
            _dataBits = string.Empty;
            _portName = "COM3";

        public PortProperties(string baud, string par, string sBits, string dBits, string name)
        {
            _baudRate = baud;
            _parity = par;
            _stopBits = sBits;
            _dataBits = dBits;
            _portName = name;
        }

        public bool OpenPort()
        {
            //tamo neki kod kojim se postavljaju parametri porta
            comPort.Open();
        }

        public bool ClosePort()
        {
            comPort.Close();
        }

        public void Send(string msg)
        {
            send.WriteData(comPort ,msg);
        }
}


Code:

    class  Send
    {
        public void WriteData(SerialPort comPort, string msg)
        {
            comPort.Write(msg);
        }
    }


Ovo je sve nesto ukratko, ali ovaj kod radi dobr. Medjutim, ne deluje mi elgantno. Nekako sticem utisak da moze i drugacije da se izorganizuje kod ali mi nikako ne pada na pamet neko resenje. Imali neko neku sugestiju, predlog?
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
93.87.159.*



+987 Profil

icon Re: Postojili elegantniji nacin?04.01.2010. u 23:08 - pre 173 meseci
Ovako na prvi pogled:

Code:

    class PortProperties
    {        
        Send send = new Send();

        private SerialPort comPort = new SerialPort();

        public string BaudRate { get; set; }

        public string Parity { get; set; }

        public string StopBits { get; set; }

        public string DataBits { get; set; }

        public string PortName { get; set; }

        public PortProperties()
        {
            BaudRate = string.Empty;
            Parity = string.Empty;
            StopBits = string.Empty;
            DataBits = string.Empty;
            PortName = "COM3";
        }

        public PortProperties(string baud, string par, string sBits, string dBits, string name)
        {
            BaudRate = baud;
            Parity = par;
            StopBits = sBits;
            DataBits = dBits;
            PortName = name;
        }

        public bool OpenPort()
        {
            //tamo neki kod kojim se postavljaju parametri porta
            comPort.Open();
        }

        public bool ClosePort()
        {
            comPort.Close();
        }

        public void Send(string msg)
        {
            send.WriteData(comPort ,msg);
        }
}


Zameni gettere settere sa automatskim. Manje koda a ista stvar...

EDIT:

Sta ce ti:

Code:

        public void Send(string msg)
        {
            send.WriteData(comPort ,msg);
        }

u PortProperties ?

Mozes Send da napravis da bude staticka f-ja od Send klase...
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.bolnica.org.rs.



+1 Profil

icon Re: Postojili elegantniji nacin?05.01.2010. u 09:04 - pre 173 meseci
Za predlog automatskih gettera i settera hvala a za ovo drugo,.... Pa ovo:
Code:

public void Send(string msg)
        {
            send.WriteData(comPort ,msg);
        }

u class PortProperties je tu jer se otvaranje i podesavanje parametara porta vrsi u toj klasi pa imam problem kada hocu da class Send bude izvedena iz class PortProperties i kad uradim:
Code:

class  Send : PortProperties
    {
        public void WriteData(string msg)
        {
            comPort.Write(msg);
        }
    }

Tada mi prijavi u ovoj funkciji da comPort nije otvoren i da ne moze da posalje podatke. Da li bi ja uopste mogao da iz Form1 pozivam direktno class Send i da odatle saljem podatke kroz port, a da se pritom parametri porta i otvaranje porta nalazi unutar class PortProperties?
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Postojili elegantniji nacin?

[ Pregleda: 1432 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.