Код МВП ведущий в C# - возможные проблемы с ДТО это


Я делаю сайт с использованием паттерн MVP. Это простой сайт, так для хранилища я использую Linq2SQL. Моя архитектура-это в основном:

(Вид - Ведущий) - Слой Сервиса - Модели Домена.

Представление состоит из 10 dropdownlists, и кнопка Отправить.

Между (взгляд - ведущая) и слой сервиса я использовать ВПД для обмена информацией. Но вот, где моя проблема лежит; слой получает данные от класса DataContext. Эти данные во всяких видах, целых чисел, строк и т. д. На мой взгляд нужно делать все в строках. Теперь мне нужно заполнить ДТО отправить ведущему. Вопрос, если я уже должна формате все так, чтобы он мог быть использован лектор/смотреть, или ведущий этого? Сейчас я Ведущий, Но я найти код немного жутко. Пожалуйста, просмотрите мой код (стр. ы я знаю, я должен использовать Ди - он будет применен ;-)):

using Business;
using System.Collections.Generic;
using Service;
using DTOs;
using System.Text;

namespace Web
{
    public class PredictionDetailsPresenter
    {
        private readonly IDriverService driverService;
        private readonly IPredictionDetailsView predictionDetailsView;
        private readonly IPredictionService predictionService;

        #region constructors
        public PredictionDetailsPresenter(IPredictionDetailsView predictionDetailsView)
            : this(predictionDetailsView, new DriverService(), new PredictionService())
        {

        }

        public PredictionDetailsPresenter(IPredictionDetailsView predictionDetailsView, IDriverService driverService,
            IPredictionService predictionService)
        {
            this.predictionDetailsView = predictionDetailsView;
            this.driverService = driverService;
            this.predictionService = predictionService;
        }
        #endregion

        #region public methods
        public void Initialize()
        {
            predictionDetailsView.SetFirstListItemOfPositionDropDownLists(" ---Select Driver--- ");

            foreach (Driver driver in driverService.GetAllDrivers())
            {
                predictionDetailsView.AddDriver(driver.Name, driver.Id.ToString());
            }

            PredictionServiceInitializeResponse response = predictionService.Initialize("Belgian Grand Prix");
            predictionDetailsView.RaceId = response.RaceId.ToString();
            predictionDetailsView.DateAndTimeOfRace = response.DateAndTimeOfRace.ToString();
            predictionDetailsView.RaceTitle = response.RaceTitle;

            predictionDetailsView.SelectedDriverIdDriverPolePosition = (response.SelectedDrivers[(int)DriverPositions.PolePosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver2ndPosition = (response.SelectedDrivers[(int)DriverPositions.SecondPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver3rdPosition = (response.SelectedDrivers[(int)DriverPositions.ThirdPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver4thPosition = (response.SelectedDrivers[(int)DriverPositions.FourthPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver5thPosition = (response.SelectedDrivers[(int)DriverPositions.FifthPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver6thPosition = (response.SelectedDrivers[(int)DriverPositions.SixthPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver7thPosition = (response.SelectedDrivers[(int)DriverPositions.SeventhPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver8thPosition = (response.SelectedDrivers[(int)DriverPositions.EightPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver9thPosition = (response.SelectedDrivers[(int)DriverPositions.NinthPosition]).ToString();
            predictionDetailsView.SelectedDriverIdDriver10thPosition = (response.SelectedDrivers[(int)DriverPositions.TenthPosition]).ToString();
        }

        public void ProcessPrediction()
        {
            PredictionServiceInsertRequest predictionServiceInsertRequest = new PredictionServiceInsertRequest();

            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.PolePosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriverPolePosition), Name = predictionDetailsView.SelectedNameDriverPolePosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.SecondPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver2ndPosition), Name = predictionDetailsView.SelectedNameDriver2ndPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.ThirdPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver3rdPosition), Name = predictionDetailsView.SelectedNameDriver3rdPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.FourthPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver4thPosition), Name = predictionDetailsView.SelectedNameDriver4thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.FifthPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver5thPosition), Name = predictionDetailsView.SelectedNameDriver5thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.SixthPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver6thPosition), Name = predictionDetailsView.SelectedNameDriver6thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.SeventhPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver7thPosition), Name = predictionDetailsView.SelectedNameDriver7thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.EightPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver8thPosition), Name = predictionDetailsView.SelectedNameDriver8thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.NinthPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver9thPosition), Name = predictionDetailsView.SelectedNameDriver9thPosition });
            predictionServiceInsertRequest.SelectedDrivers.Add(DriverPositions.TenthPosition.ToString(),
                new Driver { Id = int.Parse(predictionDetailsView.SelectedDriverIdDriver10thPosition), Name = predictionDetailsView.SelectedNameDriver10thPosition });

            predictionServiceInsertRequest.RaceId = predictionDetailsView.RaceId;

            PredictionServiceInsertResponse response = predictionService.Insert(predictionServiceInsertRequest);

            if (response.Success)
            {
                predictionDetailsView.Message = "Your prediction has been inserted succesfully";
            }
            else
            {
                StringBuilder sb = new StringBuilder();

                foreach (var error in response.Errors)
                {
                    sb.AppendFormat("{0}<br />", error);
                }

                predictionDetailsView.Message = sb.ToString();
            }
        }
        #endregion
    }

    public enum DriverPositions
    {
        PolePosition = 1,
        SecondPosition = 2,
        ThirdPosition = 3,
        FourthPosition = 4,
        FifthPosition = 5,
        SixthPosition = 6,
        SeventhPosition = 7,
        EightPosition = 8,
        NinthPosition = 9,
        TenthPosition = 10
    }
}


733
3
c#
задан 20 апреля 2011 в 02:04 Источник Поделиться
Комментарии
1 ответ

Лучше пусть ведущий форматирование. Если вы, например, имеем дело с несколькими видами, код будет гораздо легче поддерживать, а также будет проанализировано/форматирование из одного места.

Глядя на ваш код, я предлагаю вам использовать простой поко-класс для привязки данных, который возникает между Презентатором и посмотреть. Имя и должность будет достаточным свойства.

public class DriverDTO
{
public int Position {get;set;}
public string Name {get;set;}
}

public interface IPredictionDetailsView
{
public IList<DriverDTO> SelectedDrivers {get; set;}
}

Или вы могли бы просто использовать словарь для хранения ценностей. Таким образом, вы всегда будете иметь уникальные позиции, если это необходимо.

С наилучшими пожеланиями,
Маттиас

2
ответ дан 25 апреля 2011 в 04:04 Источник Поделиться