Глобальные переменные или хитрая переменная схема прохождения? - PullRequest
1 голос
/ 15 июля 2010

В качестве фона я собираюсь стать старшим в Comp E и в настоящее время работаю над проектом для моей стажировки, включающей разработку iPad для Monotouch и C #. Будучи студентом с несколькими проектами одновременно в течение семестра, стиль кода часто полностью игнорируется, чтобы заставить работать конечный продукт. Я уверен, что вы все знаете, на что это похоже.

Теперь, когда у меня гораздо больше времени на разработку, планирование и дизайн своего кода, я застрял между «быстрым и простым способом» или «сложным сложным способом». Я обрисую в общих чертах мой дизайн (который, вероятно, ужасен для начала) и приветствую все предложения.

Я создаю простое приложение для iPad, в котором пользователь может выбрать марку автомобиля, а затем этот выбор заполняет изображения на другой стороне экрана различными моделями. Теперь, когда пользователь выбирает эту модель, он выводит их на другой экран, где я запрашиваю дополнительную информацию, такую ​​как цена, год и т. Д. И т. Д. На втором экране у меня есть изображение выбранной модели автомобиля в качестве «напоминания» о том, что вы ищете снова, как изменились экраны. Заполнение этого изображения теперь зависит от того, какая марка была выбрана и какая модель. Все это делается на основе двумерного массива информации. Так что Cars [0] [3] будет моделью Acura-TSX, Cars [1] [0] - BMW 1 Series.

Теперь, пытаясь избавиться от мысли колледжа о том, чтобы бросить все в одну гигантскую ОСНОВНУЮ, я знаю, что это не красиво, но это работает, и колледж - это вопросы, а не стиль, я начал разбивать вещи на функции и вспомогательные функции. Когда я вызываю функцию, которая переключает экраны и, в конечном итоге, загружает изображение, я должен передать ему makeIndex и modelIndex, которые устанавливаются после того, как make и модели были выбраны ранее, поэтому существует множество вызовов / возвратов и передачи переменных. На мой взгляд, простой и легкий способ решить эту проблему - 2 глобальные переменные, но я знаю, что это плохая практика, и я пытаюсь разработать лучший стиль кодирования.

Что вы предлагаете, как это сделать? Было бы лучше просто сказать «винт хорошей практики» и идти с тем, что работает быстро? или я должен уделить время и отработать передачу обратно для нескольких функций, так как многие из них требуют знания этой информации?

Спасибо, что нашли время, чтобы прочитать это, и спасибо за ваши предложения.

- Адам

Ответы [ 3 ]

2 голосов
/ 15 июля 2010

Почему бы не использовать шаблон синглтона и получить что-то вроде этого:

public sealed class CarConfigurationSettings
{
    public string Make{get; set; }

    static readonly CarConfigurationSettings instance=
                                    new CarConfigurationSettings();

    static CarConfigurationSettings()
    {
    }

    CarConfigurationSettings()
    {
    }

    public static CarConfigurationSettings Instance
    {
        get
        {
            return instance;
        }
    }
}

Тогда в любом месте вашего приложения вы можете просто перейти:

var make = CarConfigurationSettings.Instance.Make;

Nice.

1 голос
/ 15 июля 2010

Это должно сводиться к вашим целям. Вы заинтересованы в:

  • выучить и практиковать хороший стиль, ведущий к простым в обслуживании приложениям?
  • завершить проект и выбросить код?

Этот проект стажировки звучит так, как будто он для реального клиента. Кто будет поддерживать это приложение после окончания стажировки? Чье время и энергия будут потрачены на улучшение продукта после того, как вы уйдете или закончится стажировка?

Я бы предложил придерживаться пути, по которому вы идете. Вы предлагаете, чтобы у вас было больше времени на планирование и разработку. Ваши коллеги оценят, что вы вложили некоторую интеллектуальную силу, и даже взяли ее в сообщество, чтобы получить обратную связь.

0 голосов
/ 23 июля 2010

Я бы взглянул на шаблон модель-представление-контроллер (MVC), где ваше представление отображает автомобили / информацию, ваша модель имеет базовые данные, и контроллер связывает их вместе. Затем вы можете аккуратно сохранить эти две переменные, которые вы хотели сделать глобальными, в своем классе контроллера - представление может легко получить к ним доступ оттуда, и контроллер может использовать их для управления тем, что появляется в представлении.

На самом деле, по моему опыту разработки для iPad, вы все равно получаете MVC из коробки, так что, возможно, вам просто нужно разобраться с этой структурой и решить, как подогнать ее под ваш дизайн.

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

Что касается "хорошего опыта", когда вы начнете разрабатывать более крупное и более сложное программное обеспечение, вы поймете, что ярлыки просто увеличивают головную боль и увеличивают время разработки в долгосрочной перспективе. Лучше содержать вещи в чистоте и четком дизайне, чтобы уменьшить сложность. Сейчас самое время не сломать эту привычку:)

...