@andrey_levushkin

Как лучше передавать данные между тестом и конструктором тестов?

Имеется два приложения:
1) Что-то вроде конструктора тестов, который позволяет создавать вопрос, ответы к нему и прочую информацию к вопросу. После создания, вопрос должен добавиться в какой-то общий список.
2) Приложение - тест, которое подгружает все вопросы, созданные в конструкторе (получает данные из списка) и уже работает с ними.
Вопрос: как лучше в этом случае осуществлять обмен информацией? А именно, как лучше хранить созданные вопросы, для дальнейшей их подгрузки в приложение - тест.
Т.к вопрос немного, думал использовать отдельные файлы для каждого вопроса и подгружать уже с них информацию в тест, но это есть очень много ресурсов и сильно влияет на скорость. Как лучше сделать?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 2
Zoominger
@Zoominger
System Engineer
А именно, как лучше хранить созданные вопросы, для дальнейшей их подгрузки в приложение - тест.

XML же. Пихайте все вопросы одного блока в один файл.
Ответ написан
@SlNik
Как вариант можешь использовать XML сериализацию:
На "Конструкторе тестов":
1 - Создаешь класс(ы) в котором(ых) описываешь все поля что хочешь сохранять. Сам класс и поля должны быть public.
2 - Класс помечаешь атрибутом [Serializable]
3 - Создаешь экземпляр класса, заполняешь его
4 - Делаешь сериализацию

На приложении "Тест"
1 - Копируешь созданный класс(ы) для "Конструкторе тестов" в этот проект
2 - Создаешь экземпляр этого класса и делаешь дисериализацию данных.

Пример:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace Лямбда_Выражения
{
    class Program
    {
        static void Main(string[] args)
        {
            Data data = new Data();
            Test test = new Test();
            Question question = new Question();
            Answer answer = new Answer();
            Answer answer2 = new Answer();

            question.ТекстВопроса = "Сколько будет 2+2 ?";
            answer.ТекстОтвета = "5";
            answer.ОтветВерный = false;
            answer2.ТекстОтвета = "4";
            answer2.ОтветВерный = true;
            question.Ответы.Add(answer);
            question.Ответы.Add(answer2);

            test.Вопросы.Add(question);
            test.ДатаВремяСоздания = DateTime.Now;
            test.Название = "Тест на знание математики";
            test.Создатель = "SlNik";

            data.Тесты.Add(test);
            data.Сохранить();
            Console.ReadKey();
        }
    }

    [Serializable]
    public class Answer
    {
       public string ТекстОтвета { get; set; }
       public bool ОтветВерный { get; set; }
    }

    [Serializable]
    public class Question
    {
        public Question()
        {
            Ответы = new List<Answer>();
        }
        public string ТекстВопроса { get; set; }
        public List<Answer> Ответы { get; set; }
    }

    [Serializable]
    public class Test
    {
        public Test()
        {
            Вопросы = new List<Question>();
        }
        public string Название { get; set; }
        public string Создатель { get; set; }
        public DateTime ДатаВремяСоздания { get; set; }
        public List<Question> Вопросы { get; set; }
    }

    [Serializable]
    public class Data
    {
        public List<Test> Тесты;
        public string Patch = Path.Combine(Environment.CurrentDirectory, "Data.xml");
        public Data()
        {
            Тесты = new List<Test>();
        }
        public Data(string patch = null)
        {
            Patch = patch;
            if (Patch == null)
                Patch = Path.Combine(Environment.CurrentDirectory, "Data.xml");

            if (File.Exists(Patch))
                Загрузить(Patch);
        }
        public void Загрузить(string patch)
        {
            XmlSerializer formatter = new XmlSerializer(typeof(Data));
            using (FileStream fs = new FileStream(patch, FileMode.OpenOrCreate))
            {
                Data data = (Data)formatter.Deserialize(fs);

                Console.WriteLine("Данные с тестами загружены");
                Console.WriteLine("Кол-во тестов:{0}", data.Тесты.Count);
            }
        }
        public void Сохранить(string patch = null)
        {
            if (patch == null)
                patch = Patch;
            XmlSerializer formatter = new XmlSerializer(typeof(Data));
            using (FileStream fs = new FileStream(patch, FileMode.Create))
            {
                formatter.Serialize(fs, this);
                Console.WriteLine("Объект сериализован");
            }
        }


    }
}


Если в приложение "Тест" будут работать большое кол-во пользователей с разных ПК используй базу данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Кошелёк.ру Санкт-Петербург
До 350 000 ₽
Драйв Москва
от 190 000 до 240 000 ₽
MSP360 Санкт-Петербург
от 90 000 до 170 000 ₽
04 апр. 2020, в 21:01
35000 руб./за проект
04 апр. 2020, в 20:32
5000 руб./за проект