lunedì 23 gennaio 2012

MVC .. Contrlli e dati e presentazione.

Ho scritto quest'esempio perchè a fronte di un applicazione scritta da un amico, mi è stato chiesto un consiglio su come deve essere gestito il codice in caso di controlli.

La mia idea è premetto si tratta della mia idea, e che il form debba essere stupido, e quasi del tutto capace d'intendere e volere.

A tal proposito deve essere il controllo ad avere un filo di cervello in più. Tutto naturalmente dipende da che cosa dobbiamo realizzare e come lo dobbiamo fare.

Chiaramente questo codice è un esempio, anche se funziona.. e potrebbe non essere sempre contestualizzato.



Di contro questo è quanto è emerso ossia:

File Data Provider ( si occupa di leggere e scrivere un file ) :
namespace FileDataProvider
{
public class FileDP : TestSimoneMVS.Commons.IDataProvider
{
public List<string> Open(string objectToOpen)
{
return File.ReadAllLines(objectToOpen).ToList();
}

public void Save(string objectToSave, List<string> obj)
{
File.WriteAllLines(objectToSave, obj.ToArray());
}
}
}


Commons Espone un interfaccia semplice semplice

namespace TestSimoneMVS.Commons
{
public interface IDataProvider
{
List<string> Open(string objectToOpen);
void Save(string objectToSave, List<string> obj);
}
}


Il controllo fa quanto è necessario per gestire il caricamento ..

namespace TextEditor
{
public partial class ucTextEditor : UserControl
{
private string _fileName = "";

private TestSimoneMVS.Commons.IDataProvider idf =
new FileDataProvider.FileDP();

public string CurrentFile
{
get { return txtEditor.Text; }
set { txtEditor.Text = value; }
}

public string FileName
{
get
{
return _fileName;
}
set
{
_fileName = value;
txtEditor.Text = String.Join(
string.Empty,
idf.Open(_fileName).ToArray()
);
}
}

public ucTextEditor()
{
InitializeComponent();
}

}
}


E nell'applicazione principale ...

private void mnuOpen_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
DialogResult dr = ofd.ShowDialog();
if (dr == DialogResult.OK)
{
ucTextEditor1.FileName = ofd.FileName;
}
ofd = null;
}


Il minimo indispensabile...

Tuttavia c'e' da fare qualche considerazione...

Per come è stata strutturata questa soluzione, ogni elemento risulta indipendente,
e di contro tutto può funzionare anche se se interviene su ogni singolo elemento.

Che sia efficace ? Per questo esempio forse no.. ma contestualizzato su soluzioni più grandi si ha il beneficio che un architettura può dare.

Nessun commento: