这些ZIORepository和Controller对于mvc是否正确?

时间:2015-07-20 22:02:11

标签: model-view-controller repository

存储库

命名空间AgenziaMatrimoniale.DataAccess {     公共类AgenziaMatrimonialeRepository     {         private readonly string _connectionString = ConfigurationManager.ConnectionStrings [“AgenziaMatrimonialeConnectionString”]。ConnectionString;

    public List<Candidato> FindSimple(int? id, string sesso, string citta)
    {

        List<Candidato> result = new List<Candidato>();
        string query = "SELECT * FROM Candidato";

        using (var connection = new SqlConnection(_connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            try
            {
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    var dbId = Convert.ToInt32(reader["Id"]);
                    var dbNome = Convert.ToString(reader["Nome"]);
                    var dbCognome = Convert.ToString(reader["Cognome"]);
                    var dbSesso = Convert.ToString(reader["Sesso"]);
                    var dbCitta = Convert.ToString(reader["Citta"]);
                    var dbProfessione = Convert.ToString(reader["Professione"]);
                    var dbDescrizione = Convert.ToString(reader["Descrizione"]);


                    if (id.HasValue && dbId == id)
                    {
                        AggiungiCandidatoAiRisultati(result, dbId, dbNome, dbCognome, dbSesso, dbCitta, dbProfessione, dbDescrizione);
                    }
                    else if (!id.HasValue 
                        && (string.IsNullOrEmpty(sesso) || dbSesso==sesso)
                        && (string.IsNullOrEmpty(citta)|| dbCitta.ToLower().Contains(citta.ToLower())))
                    {
                        AggiungiCandidatoAiRisultati(result, dbId, dbNome, dbCognome, dbSesso, dbCitta, dbProfessione, dbDescrizione);
                    }

                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(string.Format("Errore applicativo: {0}", ex.Message));
                throw ex;
            }
        }
        return result;
    }

    public Candidato FindCandidato(int id)
    {
        List<Candidato> candidati = FindSimple(id, null, null);

        if (candidati.Count == 1)
        {
            return candidati[0];
        }
        return null;
    }

控制器

命名空间AgenziaMatrimoniale.Controllers {     公共类CandidatoController:控制器     {         私人只读AgenziaMatrimonialeRepository _repository;

    public CandidatoController()
    {
        _repository = new AgenziaMatrimonialeRepository();
    }

    public ActionResult Index(string sesso, string citta)
    {
        List<Candidato> candidati = _repository.FindSimple(null, sesso, citta);

        List<SelectListItem> sessi= new List<SelectListItem> {
            new SelectListItem { Text = "Maschio", Value = "M" },
            new SelectListItem { Text = "Femmina", Value = "F" }
        };

        ViewBag.sesso = sessi;

        return View(candidati);
    }

    public ActionResult Details(int id)
    {
        Candidato candidato = _repository.FindCandidato(id);
        return View(candidato);
    }
}

}

1 个答案:

答案 0 :(得分:0)

这取决于......如果您正在尝试使用从数据库收集的数据填充表格并可能过滤该数据....那么您做得很好。 你提醒我这段代码非常相似。

using Prova1.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Web;

namespace Prova1.DataAccess
{
    public class ProvaRepository
    {
        private readonly string _connectionString = ConfigurationManager.ConnectionStrings["StringConnectionName"].ConnectionString;
        public List<Modello> Find(int? id, string filtro1, string filtro2)
        {
            List<Modello> result = new List<Modello>();
            string query = "SELECT * FROM Tabella";

            using (var connection = new SqlConnection(_connectionString))
            {
                SqlCommand command = new SqlCommand(query, connection);
                try
                {
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        var dbId = Convert.ToInt32(reader["Id"]);
                        var dbCampo1 = Convert.ToString(reader["Campo1"]);
                        var dbCampo2 = Convert.ToString(reader["Campo2"]);
                        var dbCampo3 = Convert.ToString(reader["Campo3"]);
                        Modello modello = new Modello();

                        if (id.HasValue && dbId == id)
                        {
                            AddModello(result, dbId, dbCampo1, dbCampo2, dbCampo3, modello);
                        }
                        else if (!id.HasValue
                            && (string.IsNullOrEmpty(filtro1) || dbCampo1.ToLower().Contains(filtro1.ToLower()))
                            && (string.IsNullOrEmpty(filtro2) || dbCampo2.ToLower().Contains(filtro2.ToLower()))
                            )
                        {
                            AddModello(result, dbId, dbCampo1, dbCampo2, dbCampo3, modello);
                        }
                    }
                    reader.Close();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(string.Format("Errore Applicativo {0}: ", ex.Message));
                    throw ex;
                }
            }
            return result;
        }
        private static void AddModello(List<Modello> result, int dbId, string dbCampo1, string dbCampo2, string dbCampo3, Modello modello)
        {
            modello.Id = dbId;
            modello.Campo1 = dbCampo1;
            modello.Campo2 = dbCampo2;
            modello.Campo3 = dbCampo3;
            result.Add(modello);
        }
        public Modello FindDetail(int id)
        {
            List<Modello> modello = Find(id, null, null);
            if (modello.Count == 1)
            {
                return modello[0];
            }
            return null;
        }
    }
}

编辑:我忘记了控制器

using Prova1.DataAccess;
using Prova1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Prova1.Controllers
{
    public class ProvaController : Controller
    {
        private readonly ProvaRepository _repository;
        public ProvaController()
        {
            _repository = new ProvaRepository();
        }
        // GET: Prova
        public ActionResult Index(string filtro1, string filtro2)
        {
            List<Modello> modelli = _repository.Find(null, filtro1, filtro2);
            return View(modelli);
        }
        public ActionResult Detail(int id)
        {
            Modello modello = _repository.FindDetail(id);
            return View(modello);
        }
    }
}