Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > TODO List:


Автор: blackwitcher 11.6.2015, 23:15
Всем привет, я недавно начал изучать C# и интересует такая задача. 

Написать приложение списка задач/дел с подзадачами и возможностью отмечать сделанные задачи и подзадачи.

Бизнес-сущности:

Список состоит из задач, разбитых на категории.
Задача: дата, текст, список подзадач, ссылку на категорию, признак завершения
Подзадача: текст, признак завершения.
Категория: текст.

Пользовательские функции:

Работа с задачами

просмотреть список задач.
отметить задачу сделанной.
отметить обратно не сделанной
Удалить все сделанные задачи.

Работа с подзадачами

Добавление подзадач в задачу
отметить подзадачу сделанной
отметить обратно не сделанной
если все подзадачи сделаны, то отметить задачу сделанной



P.S. подскажите с чего начинать. если я не ошибаюсь, то нужно создать БД где будут поля с Бизнес-сущности:
Задача: дата, текст, список подзадач, ссылку на категорию, признак завершения   или совсем другое?

Подскажите, а то с места не двинусь, и еще, я не хочу чтобы за меня Вы сделали, просто подсказажите, СПАСИБО  smile 

Автор: Экскалупатор 12.6.2015, 09:18
Начните с описания UseCases. Продумайте как именно ваше приложение будет использоваться. Буквально, по шагам. Можно не очень детально, но общие, концептуальные моменты проработайте.
Не спешите сразу проектировать базу, потому как потом придется переделывать.
Реализуйте слой бизнес логики, что позволит начать делать интерфейс и смотреть как работает приложение.
Прицепите к бизнесслою слой работы с данными, можно пока просто остановится на интерфейсе(API) а "ниже" сделать заглушки. т.е. фактически никуда ничего не сохранять или сохранять как попало. Если вы все сделаете правильно, то потом поменять фейковую базу на нормальную не составит труда.
Еще, как вараинт, можно взять тот же EntityFramework, который будет генерировать вам базу, но придется писать миграции разные. ну и по хорошему лучше не смешивать хранение с бизнес объектами.

Автор: blackwitcher 12.6.2015, 10:02
Цитата

Экскалупатор


А можно все это сделать в asp.net сервер с Web API и REST доступом и JS клиент, использующий это API?

Автор: Экскалупатор 12.6.2015, 10:19
конечно, почему нет. суть не меняется, все равно у вас должна быть бизнесмодель, доступ к данным и все такое. только в качестве интерфейса серверного кода будет выступать API, и уже JS будет дергать это API. все это можно. только может оказаться неподъемным если нету опыта. Какие из названных технологий вам знакомы? а какие вы думаете, что знаете? Чем меньше неизвестных вещей вы сразу возьмете, тем больше шансов дописать все это хоть до какого-то юзабельного состояния. Иначе можно погрязнуть в технических деталях и не выплыть. Рассматривайте технологии не как цель, а как средство для достижения вашей цели. Есть ли реальная причина, к примеру, не использовать MVC, Razor, etc, а сразу делать весь клиент на JS? если есть то вперед, а если это просто для "поиграться", то зависит от цели проекта.

Автор: blackwitcher 12.6.2015, 10:24
большое спасибо Экскалупатор за ответ smile , буду думать над бизнес-моделью 

позднее, как придумаю, скину для проверки, ОК?


Цитата

 Рассматривайте технологии не как цель, а как средство для достижения вашей цели.


золотые слова smile 

Автор: blackwitcher 12.6.2015, 11:32
Я думаю, что бизнес-модель будет такая:

пользователи создают аккаунт --- логин / пароль ---- 

существует БД, где есть таблица Задачи, в которой есть такие поля: ИД, дата, список задач, список подзадач, признак завершения. 

Таблица подзадач, поля --- ИД, список подзадач, признак завершения

Автор: Экскалупатор 12.6.2015, 12:51
это не бизнес модель.

Какие сущности будут в приложении?
подзадача это тоже задача(объекты одного и того же класса)?
задачу можно закончить без завершения всех подзадач? можно ли переместить подзадачу в другую задачу? превратить ее в полноценную задачу?
можно ли "переоткрыть" завершенную задачу?
Будет ли храниться история манипуляций с задачами?

Набросайте Usecases, способы использования вашего приложения. Не думайте пока про базу вообще. Создайте Классы, которые будут содержать логику работы приложения. И реализуйте минимальный UI. получится типа прототип, выявятся дополнительные требования к вашему приложению. И дальше его уже можно будет доводить до ума.

Автор: blackwitcher 12.6.2015, 13:09
кажется, теперь начал понимать)) smile 

Автор: blackwitcher 12.6.2015, 14:20
надеюсь, так правильно

Автор: blackwitcher 12.6.2015, 23:03
я вообще запутался, вот пример UI smile 

Автор: Экскалупатор 13.6.2015, 00:19
а почему они все вложенные? очевидно что все эти "подзадачи" должны находиться на втором уровне, типа:
задача "моем посуду" состоит из, и понеслась: ложки, вилки и пр.

Цитата(blackwitcher @  12.6.2015,  22:03 Найти цитируемый пост)
я вообще запутался


я по этому и предлагаю вам сразу написать юзкейсы.
они должны быть на подобии такого:
пользователь хочет добавить задачу.
1. жмет кнопку "добавить задачу" - открывается форма добавления задачи
2. заполняет форму и жмет "сохранить" - задача сохраняется, форма закрывается, пользователь оказывается на списке задач.

пользователь хочет добавить задачу с подзадачами:
1. жмет кнопку...
2. вводит описание задачи...
3. вводит подзадачи...
4. жмет сохранить...

и так далее. потом по этим кейсам можно делать UI. из них же можно делать бизнес сущности, которыми будет оперировать пользователь.

Автор: blackwitcher 14.6.2015, 03:04
Спасибо за терпение Экскалупатор

Попытался сделать в ASP.NET MVC, возникла ошибка компиляции  smile 

Если делать в ASP.NET MVC задачи и подзадачи отражать в форме таблицы? А готовность выполнения подзадачи замечать как CheckBox?

Автор: Экскалупатор 14.6.2015, 09:52
Цитата(blackwitcher @  14.6.2015,  02:04 Найти цитируемый пост)
Если делать в ASP.NET MVC задачи и подзадачи отражать в форме таблицы? А готовность выполнения подзадачи замечать как CheckBox? 

как вам удобно. но ошибки компиляции тут ни при чем.

Автор: blackwitcher 14.6.2015, 13:33
А как на примере http://www.8-ball.ru/todo.html сделать БД?

Автор: blackwitcher 15.6.2015, 00:17
Цитата

я по этому и предлагаю вам сразу написать юзкейсы.
они должны быть на подобии такого:
пользователь хочет добавить задачу.
1. жмет кнопку "добавить задачу" - открывается форма добавления задачи
2. заполняет форму и жмет "сохранить" - задача сохраняется, форма закрывается, пользователь оказывается на списке задач.

пользователь хочет добавить задачу с подзадачами:
1. жмет кнопку...
2. вводит описание задачи...
3. вводит подзадачи...
4. жмет сохранить...

и так далее. потом по этим кейсам можно делать UI. из них же можно делать бизнес сущности, которыми будет оперировать пользователь

Я все же решил делать как Вы сказали))


У меня такие вопросы:
1) У меня в form2 textBox должны обладать притуплённым текстом, а при нажатии курсора - исчезает текст (я что-то сделал, но не так, как хотелось) smile 

2) form3 вводим подзадачу --- жмем кнопку Add Subtask (или нажимаем Enter) --- должно появиться checkBox1, вводим пoдзадачу2 --- checkBox2, и так далее, это надо делать через массив (я не знаю как сделать) smile 

Буду очень благодарен, если поможете с кодом smile 

Автор: Экскалупатор 15.6.2015, 18:48
Цитата(blackwitcher @  14.6.2015,  23:17 Найти цитируемый пост)
У меня такие вопросы:
1) У меня в form2 textBox должны обладать притуплённым текстом, а при нажатии курсора - исчезает текст (я что-то сделал, но не так, как хотелось)

не совсем понял о чем тут речь.


Цитата(blackwitcher @  14.6.2015,  23:17 Найти цитируемый пост)
form3 вводим подзадачу --- жмем кнопку Add Subtask (или нажимаем Enter) --- должно появиться checkBox1, вводим пoдзадачу2 --- checkBox2, и так далее, это надо делать через массив (я не знаю как сделать)


чекбоксы, как и любые контролы программно работают как обычные классы. т.е. ваша задача сводится к добавлению еще одного экземпляра класса в контейнер(форму, панель и прочее).
для примера:
Код

        private void button1_Click(object sender, EventArgs e)
        {
            var checkbox = new CheckBox();
            checkbox.Text = textBox1.Text;
            this.Controls.Add(checkbox);
        }


но мне кажется вы немного не в ту сторону. Я как бы имел ввиду не кодировать UseCases, а просто описать их. По ним выделить основные сущности приложения, а потом под них строить UI.

К примеру, в вашем приложении очевидно будет всегда коллекция задач, ну так сделайте класс "задача", разместите где-то коллекцию объектов этого класса, потом у каждой задачи должна быть коллекция классов "подзадача". Дальше отобразите на какой-то форме весь список задач. сделайте переход на подзадачи. Потом сделайте редактирование/добавление задачи, а к ним подзадач. Они должны добавляться в коллекцию задач и после этого обновляться на первой форме, которая отображает задачи, и т.д.
Я так понимаю, что красивости вам сейчас без надобности. главное сделать работий функционал.

Автор: blackwitcher 16.6.2015, 01:37
Большое спасибо за помощь Экскалупатор

Я самостоятельно изучаю C# только 2 месяц, на ConsoleAplication я 
Цитата

К примеру, в вашем приложении очевидно будет всегда коллекция задач, ну так сделайте класс "задача", разместите где-то коллекцию объектов этого класса, потом у каждой задачи должна быть коллекция классов "подзадача".
 сделаю, а так у меня эще не получается((

Тем не менее, у меня есть такие вопросы:
1) если запустить form1, то не сразу появляется подсказка в textbox, почему - я не знаю (видимо, что-то в цикле не так), хотелось бы, чтобы Вы показали мою ошибку smile 
2) форма subtask --- вводим в textbox подзадачу --- жмем кнопку --- то, что мы ввели в textbox автоматически переносится на checkbox, а textbox становится пустым --- снова вводим --- появляется checkbox2 и т.д. (то есть, мы создаем динамично checkbox? smile ), я что-то делал, но - не то smile 
3) эту работу я делаю для себя, для лучшего понимания C#, это не для работы, не для вступления в компанию или что-то такое, я просто увидел такую ​​задачу, и мне стало интересно))

БОЛЬШОЕ СПАСИБО Экскалупатор ЗА ТЕРПЕНИЕ

Автор: blackwitcher 16.6.2015, 15:36
Цитата

2) форма subtask --- вводим в textbox подзадачу --- жмем кнопку --- то, что мы ввели в textbox автоматически переносится на checkbox, а textbox становится пустым --- снова вводим --- появляется checkbox2 и т.д. (то есть, мы создаем динамично checkbox? smile ), я что-то делал, но - не то smile


Код

private void button3_Click(object sender, EventArgs e)
        {
            checkbox = new CheckBox[size];
            for (int i = 0; i < checkbox.Length; i++)
            {
                checkbox[i] = new CheckBox();
                checkbox[i].Text = textBox3.Text;
                this.Controls.Add(checkbox[i]);
            }
        }
        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            if (textBox3.Text.Length == 0) button3.Enabled = false;
            else button3.Enabled = true;
        }


не работает smile  smile 

Автор: blackwitcher 16.6.2015, 16:27
Код

public partial class subtask : Form
{
        public subtask()
        {
            InitializeComponent();
        }
        int i = 0;
        Point location = new Point(0, 0);
}
private void button3_Click(object sender, EventArgs e)
        {
            CheckBox checkbox = new CheckBox();
            checkbox.Name = "" + i.ToString();
            checkbox.Text = textBox3.Text;
            checkbox.Size = new System.Drawing.Size(51, 51);
            checkbox.Left = location.X;
            checkbox.Top = location.Y;
            checkbox.UseVisualStyleBackColor = true;
            panel1.Controls.Add(checkbox);
            i++;
            location = new Point(location.X, location.Y + checkbox.Height);
        }

Уже может быть  smile  , но не полностью показывается текст в checkbox :  smile 

Цитата

Большое спасибо за помощь Экскалупатор

Я самостоятельно изучаю C# только 2 месяц, на ConsoleAplication я 

Цитата


К примеру, в вашем приложении очевидно будет всегда коллекция задач, ну так сделайте класс "задача", разместите где-то коллекцию объектов этого класса, потом у каждой задачи должна быть коллекция классов "подзадача".

 сделаю, а так у меня еще не получается((

Тем не менее, у меня есть такие вопросы:
1) если запустить form1, то не сразу появляется подсказка в textbox, почему - я не знаю (видимо, что-то в цикле не так), хотелось бы, чтобы Вы показали мою ошибку smile 

2) эту работу я делаю для себя, для лучшего понимания C#, это не для работы, не для вступления в компанию или что-то такое, я просто увидел такую ​​задачу, и мне стало интересно))

БОЛЬШОЕ СПАСИБО, Экскалупатор, ЗА ТЕРПЕНИЕ 

Автор: Экскалупатор 23.6.2015, 10:42
Цитата(blackwitcher @  16.6.2015,  15:27 Найти цитируемый пост)
не полностью показывается текст в checkbox

не влазит по ширине? нужно увеличить ширину (ваш К.О.)
Цитата(blackwitcher @  16.6.2015,  15:27 Найти цитируемый пост)
не сразу появляется подсказка в textbox

ее можно в конструкторе формы прописать.

Автор: blackwitcher 26.6.2015, 15:17
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)