Returning two objects from the repository

2

My application is divided as follows:

Repository - > Access to Progress database Controller - > Receives feedback from Repository and sends to View
View - > Receives feedback from Controller.

Next, my Repository looks like this:

public Projeto.Model.Projeto ObterProjetoPorEstabCcustoCodigo(Estabelecimento pEstabelecimento, CentroCusto pCentroCusto, Projeto.Model.Projeto pProjeto)
{
    using (var pim = new PIM(new infraProgress().buscaBroker(), "", "", ""))
    {
        pim.pim_busca_projeto_codigo(pEstabelecimento.Sigla, pCentroCusto.Id, pProjeto.Id, out string resumo, out string valPrevisto, out string valAlocado, out string valVariacao, out string valSaldo, out string tipoDeDocumento, out string msg);

        var projeto = new Projeto.Model.Projeto()
        {
            Descricao = resumo,
            ValPrevisto = Convert.ToDecimal(valPrevisto),
            ValorAlocado = Convert.ToDecimal(valAlocado),
            VariacaoLimite = Convert.ToDecimal(valVariacao),
            ValorLiberadoGastar = Convert.ToDecimal(valSaldo),
            Classificacao = tipoDeDocumento
        };

        return projeto;
    }
}
public Projeto.Model.Projeto ObterProjetoPorEstabCcustoCodigo(Estabelecimento pEstabelecimento, CentroCusto pCentroCusto, Projeto.Model.Projeto pProjeto)
{
    using (var pim = new PIM(new infraProgress().buscaBroker(), "", "", ""))
    {
        pim.pim_busca_projeto_codigo(pEstabelecimento.Sigla, pCentroCusto.Id, pProjeto.Id, out string resumo, out string valPrevisto, out string valAlocado, out string valVariacao, out string valSaldo, out string tipoDeDocumento, out string msg);

        var projeto = new Projeto.Model.Projeto()
        {
            Descricao = resumo,
            ValPrevisto = Convert.ToDecimal(valPrevisto),
            ValorAlocado = Convert.ToDecimal(valAlocado),
            VariacaoLimite = Convert.ToDecimal(valVariacao),
            ValorLiberadoGastar = Convert.ToDecimal(valSaldo),
            Classificacao = tipoDeDocumento
        };

        return projeto;
    }
}

Notice that the procedure pim_busca_project_codigo returns the information of my Project object and also an out msg parameter.

This is my problem, I need to return the object Projeto and also the msg .

This is because msg returns some error conditions that I need to demonstrate to the user.

    
asked by anonymous 26.06.2017 / 14:13

1 answer

2

There are several ways to resolve this. Using tuples could be a good one, but I think this mechanism is better in C # 7 and I find it difficult that you are using this language version. In addition, there is the whole "cultural" issue of using tuples as a return method, since very little is accustomed to this type of approach.

My tip is to create a wrapper class that wraps a Projeto and such a message.

Something like:

public class ProjetoMensagem
{
    public Projeto Projeto { get; set; }
    public string Mensagem { get; set; }
}

Or, if you want to make a generic class

public class ModelMensagem<T> where T : class
{
    public T Model { get; set; }
    public string Mensagem { get; set; }
}
public ProjetoMensagem ObterProjetoPorEstabCcustoCodigo(Estabelecimento pEstabelecimento, CentroCusto pCentroCusto, Projeto.Model.Projeto pProjeto)
{
    using (var pim = new PIM(new infraProgress().buscaBroker(), "", "", ""))
    {
        pim.pim_busca_projeto_codigo(pEstabelecimento.Sigla, pCentroCusto.Id, pProjeto.Id, out string resumo, out string valPrevisto, out string valAlocado, out string valVariacao, out string valSaldo, out string tipoDeDocumento, out string msg);

        var projeto = new Projeto.Model.Projeto()
        {
            Descricao = resumo,
            ValPrevisto = Convert.ToDecimal(valPrevisto),
            ValorAlocado = Convert.ToDecimal(valAlocado),
            VariacaoLimite = Convert.ToDecimal(valVariacao),
            ValorLiberadoGastar = Convert.ToDecimal(valSaldo),
            Classificacao = tipoDeDocumento
        };

        return new ProjetoMensagem
        {
            Projeto = projeto,
            Mensagem = msg
        };
    }
}
    
26.06.2017 / 14:56