Одна из основных причин, по которой я хочу использовать ViewModel вместо модели, непосредственно в контроллере, заключается в том, что я замечаю, что контроллер, содержащий доступ к данным, кажется мне неподходящим для этой работы. Разве доступ к данным / запись чтения не должны выполняться во ViewModel?
такие вещи, как:
- Доступ к данным
- Чтение / запись
- Mapping
- Выбор списков
т.е.
EF создал модель:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TestIODSManagement.Models
{
using System;
using System.Collections.Generic;
public partial class ClientJob
{
public int Id { get; set; }
public int ClientId { get; set; }
public int JobTypeId { get; set; }
public string OlapAppName { get; set; }
public string EdgeAppName { get; set; }
public Nullable<int> DatabaseServer { get; set; }
public Nullable<int> ProcessingServer { get; set; }
public Nullable<int> QueryServer { get; set; }
public string DatabaseName { get; set; }
public int DomainId { get; set; }
public int CurrencyTypeId { get; set; }
public virtual Client Client { get; set; }
public virtual CurrencyType CurrencyType { get; set; }
public virtual Domain Domain { get; set; }
public virtual JobType JobType { get; set; }
public virtual Server DbServer { get; set; }
public virtual Server OpServer { get; set; }
public virtual Server OqServer { get; set; }
}
}
Возможная модель представления:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TestIODSManagement.Models;
namespace TestIODSManagement.ViewModels
{
public class ClientJobsViewModel
{
private DeploymentsEntities db = new DeploymentsEntities();
public int Id { get; set; }
public int ClientId { get; set; }
public int JobTypeId { get; set; }
public string OlapAppName { get; set; }
public string EdgeAppName { get; set; }
public Nullable<int> DatabaseServer { get; set; }
public Nullable<int> ProcessingServer { get; set; }
public Nullable<int> QueryServer { get; set; }
public string DatabaseName { get; set; }
public int DomainId { get; set; }
public int CurrencyTypeId { get; set; }
public virtual Client Client { get; set; }
public virtual CurrencyType CurrencyType { get; set; }
public virtual Domain Domain { get; set; }
public virtual JobType JobType { get; set; }
public virtual Server DbServer { get; set; }
public virtual Server OpServer { get; set; }
public virtual Server OqServer { get; set; }
private List<Client> _clients;
public IList<Client> Clients { get { return _clients.AsReadOnly(); } }
private List<Domain> _domains;
public IList<Domain> Domains { get { return _domains.AsReadOnly(); } }
private List<CurrencyType> _currencyTypes;
public IList<CurrencyType> CurrencyTypes { get { return _currencyTypes.AsReadOnly(); } }
private List<JobType> _jobTypes;
public IList<JobType> JobTypes { get { return _jobTypes.AsReadOnly(); } }
private List<Server> _databaseServers;
public IList<Server> DatabaseServers { get { return _databaseServers.AsReadOnly(); } }
private List<Server> _processingServers;
public IList<Server> ProcessingServers { get { return _processingServers.AsReadOnly(); } }
private List<Server> _queryServers;
public IList<Server> QueryServers { get { return _queryServers.AsReadOnly(); } }
public ClientJobsViewModel(Client client)
{
ForceClientList(client);
SetSelectLists();
}
public ClientJobsViewModel(int jobId)
{
ClientJob job = db.ClientJobs.Find(jobId);
Client thisClient = db.Clients.Find(job.ClientId);
ForceClientList(thisClient);
SetSelectLists();
}
private void ForceClientList(Client client)
{
_clients = db.Clients
.Where(c => c.Id == client.Id)
.ToList();
}
private void SetSelectLists()
{
_databaseServers = db.Servers
.Where(s => s.ServerPurpos.PurposeName == "DataWarehouse").ToList();
_processingServers = db.Servers
.Where(s => s.ServerPurpos.PurposeName == "Processing").ToList();
_queryServers = db.Servers
.Where(s => s.ServerPurpos.PurposeName == "Querying").ToList();
_domains = db.Domains.ToList();
_currencyTypes = db.CurrencyTypes.ToList();
_jobTypes = db.JobTypes.ToList();
}
}
}